扩展UINavigationBar高度

时间:2018-04-20 08:33:13

标签: ios swift uinavigationbar

我跟着here跟进了一个更大的导航栏工作。结果是它看起来更大,但并不是条形图的所有元素都实际扩展,这意味着我只能与导航栏原始大小的项目位置进行交互。这是我的痛点,因为我正在尝试扩展UINavigationBar以将按钮放在扩展区域中,而这些按钮无法按下。

这是我的代码:

@IBDesignable
class CustomNavigationBar: UINavigationBar {

    var customHeight: CGFloat = 88

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        let button = UIButton(frame: CGRect(x: 0, y: 44, width: 100, height: 44))
        button.setTitle("Button", for: .normal)
        button.backgroundColor = .red
        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        self.addSubview(button)    
    }

    @objc func buttonAction() {
        print("button pressed")
    }

    override func sizeThatFits(_ size: CGSize) -> CGSize {
        return CGSize(width: UIScreen.main.bounds.width, height: customHeight)
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        for subview in self.subviews {
            var stringFromClass = NSStringFromClass(subview.classForCoder)
            if stringFromClass.contains("UIBarBackground") {
                subview.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: customHeight)
                subview.backgroundColor = .green
                subview.sizeToFit()
            }
            stringFromClass = NSStringFromClass(subview.classForCoder)
            if stringFromClass.contains("UINavigationBarContentView") {
                subview.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: customHeight)
                subview.backgroundColor = .black
                subview.sizeToFit()
            }
        }
    }
}

以下是该输出的屏幕截图:

enter image description here

您可以在此处看到,当我在UIBarBackground函数中调整layoutSubviews()的大小时,我将其设置为绿色并将其设置为自定义高度,这有效。然而,当我调整UINavigationBarContentView的大小并将其颜色设置为黑色时,颜色设置得很好,但高度保持在44.

请参阅下面的调试视图层次结构的屏幕截图,我们发现实际上两个项仍然具有原始高度44。

enter image description here

所有这些意味着我根本无法按下视图中的按钮。但是,如果我将它向上移动一点以使其在44高度内,那么我可以按它。

寻求关于如何正确调整此导航栏的所有方面的帮助

修改

如果我从subview.sizeToFit()移除UInavigationBarContentView,则会将其调整为正确的大小。我还注意到被覆盖的sizeThatFits从未被调用过?

1 个答案:

答案 0 :(得分:0)

我试图改变之前的高度,但我也不能,但是 我制作自定义导航控制器,并在viewDidLoad上调用它并通过执行隐藏本机导航控制器

self.navigationController?.navigationBar.isHidden = true

并且我在同一个地方显示自定义并且我将我的视图放在此导航控制器上,如果你想要你可以在高度这个自定义导航栏上做动画

我希望这可以帮到你