【发布时间】: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