2009-12-01 131 views
7

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

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

有没有办法做到这一点?它如何通过UINavigationController完成?

P.S.我宁愿不必诉诸于缩放转换,因为这会弄乱标题中的文字。

编辑:我解决了它的一点帮助,阅读下面发布的答案。

回答

1

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

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

+0

嗨,你有没有在导航栏上的按钮?因为我遇到同样的问题,并且如果我在导航栏的自动调整大小掩码中包含灵活的底部边距,则导航栏会调整大小,但不是按钮。 – Sefran2 2011-02-21 19:47:00

+0

确保添加navBar.autoresizesSubviews = YES ;,并且您可能还需要为导航栏按钮设置自动识别掩码 – 2012-08-02 23:09:27

+1

您是否会发布您的解决方案。您提供的链接已损坏。 – DCorrigan 2014-09-20 13:09:49

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 ... 
} 
+0

我给它一个尝试,但它并没有表现我想它的方式。更具体地说,酒吧按钮项目和标题没有规模,所以顶部屏幕。此外,导航栏本身并未实际缩放,所以渐变已关闭。我会尝试做一些手动调整的子视图,看看它是否工作... – 2009-12-03 07:02:24

+0

我试过使用不同种类的变形ob子视图,但我无法让它看起来不错。 – 2009-12-03 07:30:32