我正在尝试实施此image of my implementation。
uilabel下面的三个按钮是可点击的。我有一个UIView作为我自定义导航栏视图的子视图,然后在该视图中有两个视图,一个是uilabel,第二个是uibuttons的uiview我
我尝试过其他答案的解决方案,例如
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if self.point(inside: point, with: event) {
self.isUserInteractionEnabled = true
}else{
self.isUserInteractionEnabled = false
}
return super.hitTest(point, with: event)
}
但那并没有奏效。我注意到如果我在默认uinavigation条尺寸位置附近的按钮上方点击,则会识别出水龙头。
如果有帮助,导航栏的大小为CGSize(width: self.frame.size.width, height: 100)
。
更新
只需添加我的自定义导航类及其用法
class CustomNavigationBar: UINavigationBar {
override func sizeThatFits(_ size: CGSize) -> CGSize {
let newSize :CGSize = CGSize(width: self.frame.size.width, height: 100)
return newSize
}
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if self.point(inside: point, with: event) {
self.isUserInteractionEnabled = true
}else{
self.isUserInteractionEnabled = false
}
return super.hitTest(point, with: event)
}
}
let navigationController = UINavigationController(navigationBarClass: CustomNavigationBar.self, toolbarClass: nil)
navigationController.setViewControllers([mainController], animated: false)
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
答案 0 :(得分:1)
请检查导航栏高度是否增加,这将是停止导航栏完全交互的原因,添加以下代码并检查是否正常,
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let height: CGFloat = 100 //whatever height you want
let bounds = self.navigationController!.navigationBar.bounds
self.navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: bounds.height + height)
}
答案 1 :(得分:0)
您好,您应该仅在viewdidappear中更改导航栏框架,否则框架将不会生效。
self.navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width:width, height: height)
答案 2 :(得分:0)
发现问题!
包含标题和按钮的视图设置了一个高度为60的框架,而不是我自定义导航栏的高度。谢谢你的帮助。
这里的课程是
设置导航栏的自定义高度后,确保它的子视图边界与导航栏的边界匹配。