7

我有一个处理 UIView 的 UIViewController 子类。视图控制器以模态方式呈现(它从屏幕底部向上滑动)。在视图的顶部,我添加了一个导航栏。请注意,此栏不由导航控制器处理。

我想让导航栏在视图旋转到横向时缩小高度(类似于它在由 UINavigationController 处理时的行为)。但是,我无法在 IB 中将其自动调整大小掩码设置为灵活高度,并且在代码中这样做会导致导航栏完全消失。

有没有办法做到这一点?UINavigationController 是如何完成的?

PS 我宁愿不必求助于缩放变换,因为这会弄乱标题中的文本。

编辑:我在一点帮助下解决了这个问题,请阅读下面发布的答案。

4

2 回答 2

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 ...
}
于 2009-12-01T13:38:44.520 回答
1

我找到了解决方案,事后看来我觉得很愚蠢。我只需要在导航栏的自动调整大小掩码中包含灵活的底部边距。归功于此线程中的用户 RayNewbie,它为我指出了解决方案:

http://discussions.apple.com/thread.jspa?messageID=8295525

于 2009-12-03T07:32:51.050 回答