导航栏的横向模式问题

Posted

技术标签:

【中文标题】导航栏的横向模式问题【英文标题】:landscape mode problem with a navigation bar 【发布时间】:2010-11-18 19:47:52 【问题描述】:

我有一个 ViewController 来管理一个视图,其中我有一个表视图、一个 ImageView 和一个导航栏。 当我将其置于横向模式时,导航栏不会调整为 32,它仍保持为 44 我首先尝试在 IB 中使用自动调整大小但没有成功,然后我尝试将此代码放在 ViewController 中

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration 
    //[super willAnimateRotationToInterfaceOrientation:orientation duration:duration];
    CGRect frame = self.navigationController.navigationBar.frame;
    if (UIInterfaceOrientationIsPortrait(orientation)) 
         frame.size.height = 44;
     else 
         frame.size.height = 32;
    
    self.navigationController.navigationBar.frame = frame;

但什么都没有。 我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我搞错了,没有navigationController,所以我把IB中的导航栏和代码中的outlet navBar链接起来用了

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation  duration:(NSTimeInterval)duration 
    [super willAnimateRotationToInterfaceOrientation:orientation duration:duration];
    CGRect frame = self.navBar.frame;
    if (UIInterfaceOrientationIsPortrait(orientation)) 
        frame.size.height = 44;
     else 
        frame.size.height = 32;
    
    self.navBar.frame = frame;  

现在可以了,我只是图像视图有问题

【讨论】:

这个方法需要调用super,不要注释掉。【参考方案2】:

导航顶部栏的自定义背景图片也有同样的问题。

我的横向图像高度不正确,它是 44 像素而不是 32 像素(@2x 版本也是如此,它是 88 像素而不是 64 像素)。裁剪图像后,横向顶部栏具有正确的高度。

【讨论】:

以上是关于导航栏的横向模式问题的主要内容,如果未能解决你的问题,请参考以下文章

导航栏在横向模式下向上移动 - iOS

几种作横向导航栏的方法

基本视图 UI 导航栏对方向的响应

在不影响导航栏的情况下更改 NavigationController 的内容视图宽度

如何防止在横向上自动调整 UINavigationBar 的大小

导航栏标题不在 iPhone 的纵向模式中居中