iOS 10: Work around screen bounds orientation bug. Fixes bugs #3465 and #3505.

This commit is contained in:
Alex Szpakowski 2017-08-18 23:23:30 -03:00
parent 2dc5d32fab
commit 3d0f521be5
2 changed files with 27 additions and 3 deletions

View file

@ -176,16 +176,39 @@ UIKit_IsSystemVersionAtLeast(double version)
CGRect
UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen)
{
CGRect frame = screen.bounds;
#if !TARGET_OS_TV && (__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0)
BOOL hasiOS7 = UIKit_IsSystemVersionAtLeast(7.0);
/* The view should always show behind the status bar in iOS 7+. */
if (!hasiOS7 && !(window->flags & (SDL_WINDOW_BORDERLESS|SDL_WINDOW_FULLSCREEN))) {
return screen.applicationFrame;
frame = screen.applicationFrame;
}
#endif
return screen.bounds;
#if !TARGET_OS_TV
/* iOS 10 seems to have a bug where, in certain conditions, putting the
* device to sleep with the a landscape-only app open, re-orienting the
* device to portrait, and turning it back on will result in the screen
* bounds returning portrait orientation despite the app being in landscape.
* This is a workaround until a better solution can be found.
* https://bugzilla.libsdl.org/show_bug.cgi?id=3505
* https://bugzilla.libsdl.org/show_bug.cgi?id=3465
* https://forums.developer.apple.com/thread/65337 */
if (UIKit_IsSystemVersionAtLeast(8.0)) {
UIInterfaceOrientation orient = [UIApplication sharedApplication].statusBarOrientation;
BOOL isLandscape = UIInterfaceOrientationIsLandscape(orient);
if (isLandscape != (frame.size.width > frame.size.height)) {
float height = frame.size.width;
frame.size.width = frame.size.height;
frame.size.height = height;
}
}
#endif
return frame;
}
/*

View file

@ -293,8 +293,9 @@ SDL_AppleTVControllerUIHintChanged(void *userdata, const char *name, const char
- (void)keyboardWillHide:(NSNotification *)notification
{
if (!rotatingOrientation)
if (!rotatingOrientation) {
SDL_StopTextInput();
}
[self setKeyboardHeight:0];
}