旋转时调整UINavigationBar的大小

7
我有一个UIViewController的子类,处理一个UIView。这个视图控制器以模态方式呈现(从屏幕底部滑出)。在视图顶部,我添加了一个导航栏。请注意,此栏不由导航控制器处理。
当视图旋转到横向时,我希望获取导航栏高度缩小(类似于由UINavigationController处理时的行为)。但是,我无法在IB中将其自动调整大小的mask设置为flexible height,在代码中这样做会导致导航栏完全消失。
有没有办法实现这个效果?UINavigationController是如何实现的?
注:我不想使用缩放变换,因为这会破坏标题文本。
编辑:我通过一点帮助解决了它,请阅读下面发布的答案。
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 ...
}

我尝试了一下,但它的表现并不是我想要的。更具体地说,工具栏按钮和标题没有缩放,因此顶部超出了屏幕。此外,导航栏本身实际上没有缩放,因此渐变效果失真了。我将尝试手动调整子视图的大小,看看是否有效... - MW.
我尝试在子视图上使用不同类型的变换,但是我无法让它看起来好看。 - MW.

1
我找到了解决方案,回想起来感觉有些愚蠢。我只需要在导航栏的自动调整大小掩码中包含灵活的底部边距即可。功劳归于该帖子中的用户RayNewbie,他指引我找到了解决方案:

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


你好,你的导航栏上有按钮吗?因为我也遇到了同样的问题,如果我在导航栏的自动调整大小掩码中包含灵活的底部边距,导航栏会重新调整大小,但按钮不会。 - Sefran2
请确保添加 navBar.autoresizesSubviews = YES;,您可能还需要为导航栏按钮设置自动调整大小的掩码。 - Rik Smith-Unna
1
你能否发布你的解决方案?你提供的链接已经失效了。 - DCorrigan
@DCorrigan,我不再拥有这个代码(它属于以前的雇主)。 - MW.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接