【问题标题】:Expanding UINavigationBar Height扩展 UINavigationBar 高度
【发布时间】:2018-09-30 22:06:44
【问题描述】:

我跟着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()
            }
        }
    }
}

这是该输出的屏幕截图:

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

查看下面的调试视图层次结构的屏幕截图,我们看到实际上有 两个 项的原始高度仍为 44。

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

寻求有关如何正确调整此导航栏各个方面大小的帮助

编辑

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

【问题讨论】:

    标签: ios swift uinavigationbar


    【解决方案1】:

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

    self.navigationController?.navigationBar.isHidden = true
    

    我在同一个地方显示自定义,我把我的视图放在这个导航控制器上,如果你愿意,你也可以在这个自定义导航栏的高度上做动画

    希望对你有帮助

    【讨论】:

    • 这无济于事,将其设置为不隐藏不是问题。另外,我使用的是导航控制器还是仅使用栏也没关系。
    猜你喜欢
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2018-11-17
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多