iOS11 navigationItem.titleView适配

        iOS11发布有几个月的时间了,对于iOS需要适配的东西大家都不陌生了。如果你的应用中有使用iOS11 navigationItem.titleView,当你升级iOS,在你的应用中可能会有类似的情况出现,如下图

navigationItem.titleView

在iOS 11中titleView的宽度设置了没有效果,也没有拉伸展示,只是图片缩在一起了。打开Xcode发现,在iOS 11 中苹果改变了UINavigationBar的视图层级,titleView不是加到NavigationBar上,而是加到了UINavigationBarContentView上,这就是原因所在。

        navigationItem.titleView的适配,网上一搜就能搜出很多,但是大多是OC语言的。我今天主要讲Swift语言的适配方法。

为了大家更好的理解,我还是先罗列一下OC语言关于navigationItem.titleView的适配。

为了解决上述问题,在你自定义的titleView中重写intrinsicContentSize 的Get 方法,如下:

- (CGSize)intrinsicContentSize{

return UILayoutFittingExpandedSize;

}

有的人可能会说我没有单独写titleView,对于这种情况,我也没有更好的办法,那就单独写一个view类吧(如果大家有更好的办法给我留言吧)。顺着OC的这个思路,转化成Swift语言,如下:

classGNNavBar:UIView{

    overridevarintrinsicContentSize:CGSize{

        return UILayoutFittingExpandedSize

    }

    /*

    // Only override draw() if you perform custom drawing.

    // An empty implementation adversely affects performance during animation.

    override func draw(_ rect: CGRect) {

        // Drawing code

    }

    */

}

 overridefuncviewDidLoad() {

        super.viewDidLoad()

        let navTitleView =Bundle.main.loadNibNamed("GNNavBar", owner:nil, options:nil)?[0]as!GNNavBar

        self.navigationItem.titleView= navTitleView

    }

运行结果如下:

适配后

你可能感兴趣的:(iOS11 navigationItem.titleView适配)