在iOS 11

时间:2017-09-28 05:07:07

标签: ios swift3 ios11

我正在使用自定义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
        }

2 个答案:

答案 0 :(得分:12)

在iOS 11中,titleView正在设置Autolayout。因此,titleView的大小是你在titleView中设置的视图的内在大小。

您的视图类(您将其设置为titleView)中的此代码应该有所帮助:

override var intrinsicContentSize: CGSize {
    return UILayoutFittingExpandedSize
} 

答案 1 :(得分:0)

我用xib创建了一个自定义UIView。在UIView中,我在顶部添加了UILabelImageViewUIButton。点击“隐藏”按钮后,我可以调用点击事件。

enter image description here

导入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")
}

结果- enter image description here

我希望这会起作用。在代码11.6和操作系统版本13.6上进行了测试