2017-07-17 78 views
0

我正在尝试执行此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

发现问题了!

包含标题和按钮的视图设置了高度为60的框架,而不是自定义导航栏的高度。谢谢你们的帮助。这里

教训是

设置自定义高度导航栏确保它的子视图的边界导航栏的边界匹配之后。

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) 

} 
+0

嘿Manikanta,我试过你的建议,但没有奏效。 –

+0

你可以请分享你自定义导航栏的代码。 –

+0

我已经用我的自定义类更新了我的问题以及我如何使用它。 –

0

嗨,你应该改变viewdidappearar中的导航栏框架,否则帧不会生效。

self.navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width:width, height: height)