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