在-shouldAutorotateToInterfaceOrientation中预测UI元素框架:

时间:2011-05-05 09:14:14

标签: ios uinavigationbar uitoolbar autorotate

是否有可能(以编程方式,在运行时)查询导航栏和/或工具栏的高度/厚度将在后旋转?

也就是说,在为特定子视图构建框架时,我想相对于导航栏和工具栏之间的可用空间设置其框架。为了使其顺利进行,最好在shouldAutorotateToInterfaceOrientation:而不是didRotateFromInterfaceOrientation:中执行此操作,但self.navigationController.toolbar.frame.size.height之类的值在方向设备之间是不同的。

我想根据工具栏的厚度来计算我的新子视图框架,并且我想在没有硬编码值的情况下进行计算,例如32pt,44pt等。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以在willAnimateRotationToInterfaceOrientation:duration:方法中更改观看框架。

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];

    NSLog(@"%@", NSStringFromCGRect(self.navigationController.navigationBar.frame));
}

有关详细信息,请查看Apple提供的文档。

答案 1 :(得分:1)

您应该在willAnimateRotationToInterfaceOrientation:duration:

中调整所有帧大小

AFAIK在您到达didRotateFromInterfaceOrientation:之前无法预测UIViews的大小

一种方法是在代码中调整所有框架大小,包括工具栏。这样您就可以完全控制UI元素的大小。