【问题标题】:How to prevent autoresizing UINavigationBar on Landscape如何防止在横向上自动调整 UINavigationBar 的大小
【发布时间】:2011-08-11 09:09:36
【问题描述】:

一般情况下,在横向模式下,导航控制器控制的导航栏会自动缩小尺寸。

但我想阻止自动调整大小。

首先,我将导航栏设置为隐藏,并使用了另一个不受导航控制器控制的导航栏。所以,我解决了这个问题。但我想找到在不使用不受导航控制器控制的另一个栏的情况下禁用自动调整横向导航栏的方法。

【问题讨论】:

  • 为什么要这样做?这是标准的 iOS 行为。
  • @nielsbot 看看横向的 iOS 7 Safari ;)

标签: iphone uinavigationbar landscape


【解决方案1】:

我通过在 UINavigationBar 上创建一个类别解决了这个问题:

@implementation UINavigationBar (customHeight)

- (CGSize)sizeThatFits:(CGSize)size
{
    CGSize newSize = CGSizeMake(self.frame.size.width,44);
    return newSize;
}

@end

创建类别后,高度现在固定为 44 - 我什至不需要在任何地方导入类别。

我的应用使用情节提要,但我很确定它会以任何一种方式工作。

【讨论】:

  • 虽然这解决了问题,但尝试使用类别来覆盖方法并不是一个好习惯。您应该在子类中执行此操作。在这里阅读更多:developer.apple.com/library/ios/documentation/Cocoa/Conceptual/…
  • 此解决方案适用于导航栏,但它会将我的工具栏从视图底部向上移动 10px 左右...
  • 这会导致栏中的元素不再垂直居中。有什么办法解决吗?
【解决方案2】:

这适用于 iOS 8

extension UINavigationBar {
    public override func sizeThatFits(size: CGSize) -> CGSize {
        var newSize = CGSizeMake(UIScreen.mainScreen().bounds.width, 44)
        return newSize
    }
}

【讨论】:

  • 请通过简短的说明如何以及为什么来教育提问者和我们所有人。这样,您不仅可以希望得到 jinbruce627 的支持,还可以得到其他用户的支持。
猜你喜欢
  • 1970-01-01
  • 2011-04-02
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多