6

我正在尝试获取 GLKViewController 子类的可见绘图区域。在 iOS 7 中,我会确定方向,然后相应地调整 [UIScreen mainScreen].bounds.size。然后我会减去 navigationBar 和 statusBarFrame 的高度,瞧!- 我的绘图区域的实际大小。

现在我正在尝试使用 viewWillTransitionToSize 更新 iOS 8,但是当我旋转设备时(我打开了 UIInterfaceOrientationMaskAll),传递的大小是错误的。事实上,视图的宽度是正确的,但高度不正确(这涉及到导航栏和状态栏的高度)。

我已经看到了一些关于 SO 的问题,但没有任何实际涉及这个问题的问题,至少没有任何对我有帮助的问题。

在我看来,这似乎没有做任何有趣的事情,如果我错了,请纠正我:

- (void)viewWillTransitionToSize : (CGSize) size
       withTransitionCoordinator : (id<UIViewControllerTransitionCoordinator>) coordinator
{
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

    NSLog(@"size changed : orig(%f,%f) mainScreen(%f,%f)", size.width, size.height, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);

    [self updateViews:size];
}

转换为横向的输出:

size changed : orig(568.000000,256.000000) mainScreen(320.000000,568.000000)

从 viewWillTransitionToSize 传递的高度似乎是:

320 - (2*32) = 256

然后下一个旋转到纵向:

size changed : orig(320.000000,536.000000) mainScreen(568.000000,320.000000)

从 viewWillTransitionToSize 传递的高度似乎是:

568 - 32 = 536

32恰好是横向模式下导航栏的高度(如果这意味着什么)。

所以我的问题是:viewWillTransitionToSize 是如何得到这个大小的?它如何考虑根据方向改变大小或消失的额外条?最重要的是,为什么要使用这些不正确的高度?

4

1 回答 1

13

查看视图帧大小viewWillTransitionToSize:withTransitionCoordinationar:时,您可能会在更新之前获得帧。

animateAlongsideTransition:completion:在这个方法中更好地使用:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [super viewWillTransitionToSize:size
          withTransitionCoordinator:coordinator];


    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
    {
          //update views here, e.g. calculate your view
    }
                                 completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
     {
     }];
}
于 2015-03-24T21:14:06.527 回答