我跟着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。
请看下面的调试 View 层次结构的屏幕截图,我们看到实际上有两个项的原始高度仍为 44。
所有这些意味着我根本无法按下 View 中的按钮。但是,如果我将它向上移动一点,使其位于 44 高度以内,那么我就可以按下它。
寻求有关如何正确调整此导航栏所有方面的帮助
编辑
如果我从 UInavigationBarContentView
中删除 subview.sizeToFit()
,它会将其调整为正确的大小。我还注意到覆盖的 sizeThatFits
从未被调用?
最佳答案
我之前尝试过改变高度,但我也做不到,但是 我制作自定义导航 Controller 并在 viewDidLoad 上调用它并通过执行隐藏 native 导航 Controller
self.navigationController?.navigationBar.isHidden = true
我在同一个地方显示自定义,我把我的 View 放在这个导航 Controller 上,如果你愿意,你也可以在这个自定义导航栏的高度上做动画
希望对你有帮助
关于ios - 扩展 UINavigationBar 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49937411/