因爲個人項目要適配到iOS7.1, 而如今已是9時代了,在實際工做中我也是遇到了各類奇葩的坑,因此我想盡快把遇到的iOS7適配問題和解決方案分享出來,之後這些東西可能就用處不大了。佈局
1.字體問題字體
iOS7中的字體適配恐怕是最麻煩的坑了,緣由是iOS7以上的許多字體在7都是不存在的,甚至包括一些system-字體。好比system-black,若是你使用了black,在7以上黑體顯示沒有問題,但在7裏就變成了中空顯示,而且你把它換成system-medium後,還會有文字被切割的神奇現象,究其緣由就是7下沒有system-black,在字體渲染上出了問題。因此使用字體要當心了,若是必定要使用system-black,能夠用system-medium代替,或者作相似如下兼容:動畫
headerLbl.font = IOS_VERSION < 8 ? [UIFont systemFontOfSize:14] : [UIFont systemFontOfSize:14 weight:UIFontWeightMedium];
額外提一句,若是你在storyboard或xib中加載了一個並不存在的字體,在進入這個storyboard加載的頁面會變得異常緩慢,由於系統會遍歷整個字體庫去查找一個不存在的字體,發現找不到後他只能拿system代替,因此不要試圖加載你項目中沒有的字體。spa
另外,在iOS9中默認字體變成了San Francisco字體,取代早前的Helvetica字體,在風格上有些許區別的同時,字體高度和文字佈局也有差別,若是你的label是寫死了高度約束的就要注意了,在更新到iOS9後,你的內容看起來會像被切掉了頂部。因爲網上有許多9適配的資料,這裏就再也不贅述了。代理
2.動畫問題code
iOS7的動畫有一個時序問題。最簡單的一個場景就是,點擊彈出來的一個actionSheet,actionSheet收起的同時,彈出一個alertView,若是這兩個動畫同時執行,alertView可能會閃一下就消失了,也可能正常顯示,取決於alertView中的文字內容的長度。若是文字內容較多,致使alertView的layer來不及渲染,alertView會閃一下消失。解決方案就是在actionSheet的dismiss動畫結束後,再彈出alertView,dismiss能夠用一個代理方法監聽:orm
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { // show alertView here! }
3.UILabelblog
iOS7中,若是不對label設置高度約束或給height賦值,當label裏面無內容時,高度默認爲0;而iOS7之後,即便label無內容,會根據label默認的fontSize對應的高度自動給一個對應的高度。注意這點能夠避免佈局時產生的問題。 ci
4.viewDidLayoutSubviewsit
iOS7中這個方法可能會致使崩潰,穩妥的處理是在viewDidLayoutSubviews方法末尾添加[self.view layoutsubviews];
5.UIButton
iOS7下 button的normal和selected狀態的title是分開的,設置了normal並不會設置selected的title,須要分別設置。
目前能想到的就這麼多,歡迎補充~