我正在尝试获取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如何获得这个大小?如何根据方向考虑更改尺寸或消失的额外条形图?最重要的是,为什么它使用这些不正确的高度?
答案 0 :(得分:12)
查看视图帧大小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)
{
}];
}