我有一个UIViewController的子类来处理UIView。视图控制器以模态方式呈现(它从屏幕底部向上滑动)。在视图的顶部,我添加了一个导航栏。请注意,此栏不由导航控制器处理。
当视图旋转到横向时,我希望导航栏的高度会缩小(类似于UINavigationController处理时的行为方式)。但是,我无法在IB中将其自动调整遮罩设置为灵活高度,并且在代码中这样做会导致导航栏完全消失。
有办法做到这一点吗?它是如何通过UINavigationController完成的?
P.S。我宁愿不必采用缩放变换,因为这会弄乱标题中的文本。
编辑:我在一点帮助下解决了这个问题,请阅读下面的答案。答案 0 :(得分:5)
为什么不在viewWillAppear和didRotateFromInterfaceOrientation中检查当前方向,并设置相应的框架,而不是设置它的自动调整遮罩?
- (void) updateNavBar {
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if ((UIInterfaceOrientationLandscapeLeft == orientation) ||
(UIInterfaceOrientationLandscapeRight == orientation)) {
myNavBar.frame = CGRectMake(0, 0, 480, 34);
} else {
myNavBar.frame = CGRectMake(0, 0, 320, 44);
}
}
- (void) viewWillAppear {
[self updateNavBar];
// ... SNIP ...
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self updateNavBar];
// ... SNIP ...
}
答案 1 :(得分:1)
我找到了解决方案,事后我感到相当愚蠢。我只需要在导航栏的autoresize掩码中包含灵活的底部边距。信用是由于用户RayNewbie在这个帖子中,它指出了解决方案: