UINavigationBar在景观中被裁剪

时间:2017-03-03 14:50:35

标签: ios swift uinavigationbar

我正面临着这样一种情况:导航栏在纵向模式下看起来很好但在横向上被裁剪:

肖像 portraid mode

景观 landscape mode

我将UINavigationBar子类化如下:

class CustomNavigationBar: UINavigationBar {
    override func sizeThatFits(size: CGSize) -> CGSize {
        let newSize :CGSize = CGSize(width: self.frame.size.width, height: 64)
        return newSize
    }
}

并通过StoryBoard将其分配给相应的导航控制器:

CustomNavigationBar

但没有区别。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

导航栏在纵向和横向模式下具有不同的高度。您应该根据导航栏高度处理自定义标题视图的内容。当导航栏的高度发生变化时,使用autolayout自动调整子视图。

答案 1 :(得分:0)

我通过覆盖扩展中的sizeThatFits func来解决它。这个想法是它将大小重置为44,这是肖像的默认值:

// prevent navigation bars from resizing in landscape
extension UINavigationBar {
    public override func sizeThatFits(size: CGSize) -> CGSize {
        let portraitSize = CGSizeMake(UIScreen.mainScreen().bounds.width, 44)
        return portraitSize
    }
}