调用willRotateToInterfaceOrientation后,iOS 7和iOS 8上的mainScreen边界大小会有所不同

乔丹·H

我知道iOS 8现在会针对当前界面方向返回正确的屏幕尺寸。要在iOS 7中获取某个方向的设备宽度,如果方向是横向,则必须返回高度;如果方向是纵向,则必须返回宽度,但是您始终可以在iOS 8中返回该宽度。我正在开发的应用程序将支持iOS 7和8。(请参见下面的代码)

但是,我注意到了另一个区别。如果我调用此方法并传递其方向(从中获取willRotateToInterfaceOrientation),则在iOS 7上,它将返回正确的宽度,但在iOS 8上,它将返回旧(当前)方向的宽度。

当我知道当前在iOS 8和iOS 7上将要使用的屏幕方向时,如何获得屏幕的宽度?

虽然我可以交换iOS 8的宽度和高度,但是当设备未转换到新方向时调用此函数时,这将返回不正确的值。我可以创建两种不同的方法,但我正在寻找更清洁的解决方案。

- (CGFloat)screenWidthForOrientation:(UIInterfaceOrientation)orientation
{
    NSString *reqSysVer = @"8.0";
    NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
    if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
        return [UIScreen mainScreen].bounds.size.width;
    }

    CGRect screenBounds = [UIScreen mainScreen].bounds;
    CGFloat width = CGRectGetWidth(screenBounds);
    CGFloat height = CGRectGetHeight(screenBounds);

    if (UIInterfaceOrientationIsPortrait(orientation)) {
        return width;
    } else if (UIInterfaceOrientationIsLandscape(orientation)) {
        return height;
    }
    return width;
}

用例:

运行iOS 7的iPad:

  • 调用[self screenWidthForOrientation:[UIApplication sharedApplication].statusBarOrientation]viewDidAppear返回正确的宽度
  • 调用[self screenWidthForOrientation:toInterfaceOrientation]willRotateToInterfaceOrientation:toInterfaceOrientation:duration返回正确的宽度

运行iOS 8的iPad:

  • 调用[self screenWidthForOrientation:[UIApplication sharedApplication].statusBarOrientation]viewDidAppear返回正确的宽度
  • 调用[self screenWidthForOrientation:toInterfaceOrientation]willRotateToInterfaceOrientation:toInterfaceOrientation:duration返回错误的宽度(旋转发生前当前的宽度)
Ti

这是我的代码,用于在应用约束之前为iOS7 / iOS8计算正确的宽度和高度。

- (void) applyConstraints:(UIInterfaceOrientation)toInterfaceOrientation
{   
    CGSize screenSize = [[UIScreen mainScreen] bounds].size;
    CGFloat heightOfScreen;
    CGFloat widthOfScreen;
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
        // iOS 8.0 and later code here
        if ([UIApplication sharedApplication].statusBarOrientation == toInterfaceOrientation) {
            heightOfScreen = screenSize.height;
            widthOfScreen = screenSize.width;
        } else {
            heightOfScreen = screenSize.width;
            widthOfScreen = screenSize.height;
        }
    } else {
        if (UIDeviceOrientationIsLandscape(toInterfaceOrientation)) {
            heightOfScreen = screenSize.width;
            widthOfScreen = screenSize.height;
        } else {
            heightOfScreen = screenSize.height;
            widthOfScreen = screenSize.width;
        }
    }
    //Applying new constraints
    ...
}

它不是很漂亮,但是可以工作=)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在iOS8上未调用willRotateToInterfaceOrientation

来自分类Dev

线程问题在iOS 7上的行为有所不同

来自分类Dev

SSL-在iOS7中的行为有所不同?

来自分类Dev

UITableView在iOS 7和iOS 6中的行为有所不同

来自分类Dev

iOS 7导航栏和滚动视图在情节提要和模拟器中有所不同

来自分类Dev

为什么此代码在64位版本上的行为会有所不同?(iOS / UIColor / UIKeyedArchiver)

来自分类Dev

UIPopoverController的大小调整行为在iOS 7.0和iOS 7.1之间有所不同

来自分类Dev

UIAlertView中取消按钮的顺序在iOS8中有所不同

来自分类Dev

UIScrollView的行为在iOS8中有所不同

来自分类Dev

NSDateComponents周在iOS8上的工作方式有所不同

来自分类Dev

iOS 8和iOS 7上的UIScrollView框架大小不同

来自分类Dev

如何为Android和IOS传递和使用Web api服务器地址,这对于所有三种环境Debug,QA,Prod都会有所不同?

来自分类Dev

在NFSv3和NFSv4上,Fortran OPEN调用有所不同

来自分类Dev

iOS NSDateFormatter在设备上的行为有所不同

来自分类Dev

离子,副标题在Safari和iOS中的呈现方式有所不同

来自分类Dev

与Android相比,iOS上的ARGB颜色有所不同

来自分类Dev

SHA256哈希结果在Android和iOS上对于大数字而言有所不同

来自分类Dev

UITableView在iOS 7和iOS 6中的行为有所不同

来自分类Dev

在iOS 6和iOS 7中,“取消”和“清除”按钮的行为有所不同

来自分类Dev

iOS 7导航栏和滚动视图在情节提要和模拟器中有所不同

来自分类Dev

iOS 8屏幕边界在设备和模拟器上在横向方向上有所不同

来自分类Dev

情节提要+ UIcollectionView:UI在iOS Simulator和设备上的显示方式有所不同

来自分类Dev

调用willRotateToInterfaceOrientation后,iOS 7和iOS 8上的mainScreen边界大小会有所不同

来自分类Dev

在iOS8和iOS7中,viewDidLoad的调用方式有所不同吗?

来自分类Dev

iOS 7和iOS 8上的框架高度不同

来自分类Dev

设置为相同的数量后,按钮和输入高度会有所不同

来自分类Dev

离子,副标题在Safari和iOS中的呈现方式有所不同

来自分类Dev

与Android相比,iOS上的ARGB颜色有所不同

来自分类Dev

Firebase OTP 身份验证消息在 iOS 和 Android 中有所不同

Related 相关文章

  1. 1

    在iOS8上未调用willRotateToInterfaceOrientation

  2. 2

    线程问题在iOS 7上的行为有所不同

  3. 3

    SSL-在iOS7中的行为有所不同?

  4. 4

    UITableView在iOS 7和iOS 6中的行为有所不同

  5. 5

    iOS 7导航栏和滚动视图在情节提要和模拟器中有所不同

  6. 6

    为什么此代码在64位版本上的行为会有所不同?(iOS / UIColor / UIKeyedArchiver)

  7. 7

    UIPopoverController的大小调整行为在iOS 7.0和iOS 7.1之间有所不同

  8. 8

    UIAlertView中取消按钮的顺序在iOS8中有所不同

  9. 9

    UIScrollView的行为在iOS8中有所不同

  10. 10

    NSDateComponents周在iOS8上的工作方式有所不同

  11. 11

    iOS 8和iOS 7上的UIScrollView框架大小不同

  12. 12

    如何为Android和IOS传递和使用Web api服务器地址,这对于所有三种环境Debug,QA,Prod都会有所不同?

  13. 13

    在NFSv3和NFSv4上,Fortran OPEN调用有所不同

  14. 14

    iOS NSDateFormatter在设备上的行为有所不同

  15. 15

    离子,副标题在Safari和iOS中的呈现方式有所不同

  16. 16

    与Android相比,iOS上的ARGB颜色有所不同

  17. 17

    SHA256哈希结果在Android和iOS上对于大数字而言有所不同

  18. 18

    UITableView在iOS 7和iOS 6中的行为有所不同

  19. 19

    在iOS 6和iOS 7中,“取消”和“清除”按钮的行为有所不同

  20. 20

    iOS 7导航栏和滚动视图在情节提要和模拟器中有所不同

  21. 21

    iOS 8屏幕边界在设备和模拟器上在横向方向上有所不同

  22. 22

    情节提要+ UIcollectionView:UI在iOS Simulator和设备上的显示方式有所不同

  23. 23

    调用willRotateToInterfaceOrientation后,iOS 7和iOS 8上的mainScreen边界大小会有所不同

  24. 24

    在iOS8和iOS7中,viewDidLoad的调用方式有所不同吗?

  25. 25

    iOS 7和iOS 8上的框架高度不同

  26. 26

    设置为相同的数量后,按钮和输入高度会有所不同

  27. 27

    离子,副标题在Safari和iOS中的呈现方式有所不同

  28. 28

    与Android相比,iOS上的ARGB颜色有所不同

  29. 29

    Firebase OTP 身份验证消息在 iOS 和 Android 中有所不同

热门标签

归档