我正在使用自定义titleView并将其分配给navigationItem titleView。在iOS 11之前它一直运行良好。由于更新它的位置错误地放在中心位置,因为它原来是在更左边。除此之外,用户交互无效。
titleView = Bundle.main.loadNibNamed("SomeNib", owner: self, options: nil)?.first as? SomeNib
navigationItem.titleView = titleView
titleView只是一个通常的笔尖。
然后启用互动:
if let titleView = self.navigationItem.titleView {
let tap = UITapGestureRecognizer(target: self, action: #selector(onTitleViewTap))
titleView.addGestureRecognizer(tap)
titleView.isUserInteractionEnabled = true
}
答案 0 :(得分:12)
在iOS 11中,titleView正在设置Autolayout。因此,titleView的大小是你在titleView中设置的视图的内在大小。
您的视图类(您将其设置为titleView)中的此代码应该有所帮助:
override var intrinsicContentSize: CGSize {
return UILayoutFittingExpandedSize
}
答案 1 :(得分:0)
我用xib创建了一个自定义UIView。在UIView中,我在顶部添加了UILabel
,ImageView
和UIButton
。点击“隐藏”按钮后,我可以调用点击事件。
导入UIKit
class NavBarTitleView: UIView {
@IBOutlet weak var title : UILabel!
@IBOutlet weak var clickButton: UIButton!
/// Create an instance of the class from its .xib
class func instanceFromNib() -> NavBarTitleView {
return UINib(nibName: "NavBarTitleView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! NavBarTitleView
}
//this line of code will help to enable a click event.
override var intrinsicContentSize: CGSize {
return UIView.layoutFittingExpandedSize
}
}
然后在UIViewcontroler中,添加了以下代码。
if let title = self.navBarTitle{
if navbarTitleView == nil {
navbarTitleView = NavBarTitleView.instanceFromNib()
self.navigationItem.titleView = navbarTitleView
}
navbarTitleView!.title.text = title
navbarTitleView!.clickButton.addTarget(self, action: #selector(didTapNavbarTitle(_:)), for: .touchUpInside)
navbarTitleView!.layoutIfNeeded()
}else{
navigationItem.title = ""
}
按钮动作:
@objc func didTapNavbarTitle(_ sender: Any){
print("NavBar Selected")
}
我希望这会起作用。在代码11.6和操作系统版本13.6上进行了测试