適用iOS11和iPhoneX的一些變化
前陣子項目開發(fā)忙成狗,就一直沒做iOS11的適配,直到XcodeGM版發(fā)布后,我胸有成竹的在iPhoneX上跑起項目,整個人都涼透了。。.下面總結(jié)一下我遇到的坑,不是很全面,日后補充。
導(dǎo)航欄
導(dǎo)航欄高度的變化
iOS11之前導(dǎo)航欄默認(rèn)高度為64pt(這里高度指statusBar + NavigationBar),iOS11之后如果設(shè)置了prefersLargeTitles = YES則為96pt,默認(rèn)情況下還是64pt,但在iPhoneX上由于劉海的出現(xiàn)statusBar由以前的20pt變成了44pt,所以iPhoneX上高度變?yōu)?8pt,如果項目里隱藏了導(dǎo)航欄加了自定義按鈕之類的,這里需要注意適配一下。
導(dǎo)航欄圖層及對titleView布局的影響
iOS11之前導(dǎo)航欄的title是添加在UINavigationItemView上面,而navigationBarButton則直接添加在UINavigationBar上面,如果設(shè)置了titleView,則titleView也是直接添加在UINavigationBar上面。iOS11之后,大概因為largeTitle的原因,視圖層級發(fā)生了變化,如果沒有給titleView賦值,則titleView會直接添加在_UINavigationBarContentView上面,如果賦值了titleView,則會把titleView添加在_UITAMICAdaptorView上,而navigationBarButton被加在了_UIButtonBarStackView上,然后他們都被加在了_UINavigationBarContentView上,如圖:
所以如果你的項目是自定義的navigationBar,那么在iOS11上運行就可能出現(xiàn)布局錯亂的bug,解決辦法是重寫UINavigationBar的layoutSubviews方法,調(diào)整布局,上代碼:
- (void)layoutSubviews { [super layoutSubviews]; //注意導(dǎo)航欄及狀態(tài)欄高度適配 self.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), naviBarHeight); for (UIView *view inself.subviews) {if([NSStringFromClass([view class]) containsString:@“Background”]) {view.frame = self.bounds; } elseif ([NSStringFromClass([view class])containsString:@“ContentView”]) { CGRectframe = view.frame;frame.origin.y = statusBarHeight; frame.size.height =self.bounds.size.height - frame.origin.y; view.frame = frame; } }}
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
適用iOS11和iPhoneX的一些變化下載
相關(guān)電子資料下載
- iOS17.1可能明天發(fā)布,iOS17.1主要修復(fù)哪些問題? 376
- 華為全新鴻蒙蓄勢待發(fā) 僅支持鴻蒙內(nèi)核和鴻蒙系統(tǒng)應(yīng)用 719
- 蘋果手機(jī)系統(tǒng)iOS 17遭用戶質(zhì)疑 731
- iPhone12輻射超標(biāo)?蘋果推送iOS 17.1解決此事 750
- 傳華為囤積零部件 目標(biāo)明年智能手機(jī)出貨7000萬部;消息稱 MiOS 僅限國內(nèi),小米 28208
- 蘋果推送iOS17.0.3,解決iPhone15Pro系列存在機(jī)身過熱 216
- Testin云測兼容和真機(jī)服務(wù)平臺中上線iPhone 15系列手機(jī) 208
- 利爾達(dá)推出搭載HooRiiOS的Matter模組 145
- 運放參數(shù)解析:輸入偏置電流(Ibias)和失調(diào)電流(Ios) 128
- 昆侖太科發(fā)布支持國產(chǎn)飛騰騰銳D2000芯片的開源BIOS固件版本 448