????????iOS11發(fā)布有幾個月的時間了倒脓,對于iOS需要適配的東西大家都不陌生了。如果你的應用中有使用iOS11 navigationItem.titleView含思,當你升級iOS崎弃,在你的應用中可能會有類似的情況出現(xiàn),如下圖
在iOS 11中titleView的寬度設置了沒有效果含潘,也沒有拉伸展示饲做,只是圖片縮在一起了。打開Xcode發(fā)現(xiàn)调鬓,在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
? ? }
運行結果如下: