Iphone X 與 IOS 11 適配記錄

一、IOS 11適配


1.1 導(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,如果項(xiàng)目里隱藏了導(dǎo)航欄加了自定義按鈕之類的,這里需要注意適配一下。

導(dǎo)航欄圖層及對(duì)titleView布局的影響

iOS11之前導(dǎo)航欄的title是添加在UINavigationItemView上面,而navigationBarButton則直接添加在UINavigationBar上面,如果設(shè)置了titleView,則titleView也是直接添加在UINavigationBar上面。iOS11之后,大概因?yàn)閘argeTitle的原因,視圖層級(jí)發(fā)生了變化,如果沒(méi)有給titleView賦值,則titleView會(huì)直接添加在_UINavigationBarContentView上面,如果賦值了titleView,則會(huì)把titleView添加在_UITAMICAdaptorView上,而navigationBarButton被加在了_UIButtonBarStackView上,然后他們都被加在了_UINavigationBarContentView上,如圖:



所以如果你的項(xiàng)目是自定義的navigationBar,那么在iOS11上運(yùn)行就可能出現(xiàn)布局錯(cuò)亂的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 in self.subviews) {
        if([NSStringFromClass([view class]) containsString:@"Background"]) {
            view.frame = self.bounds;
        }
        else if ([NSStringFromClass([view class]) containsString:@"ContentView"]) {
            CGRect frame = view.frame;
            frame.origin.y = statusBarHeight;
            frame.size.height = self.bounds.size.height - frame.origin.y;
            view.frame = frame;
        }
    }
}

再補(bǔ)充一點(diǎn),看了簡(jiǎn)書App適配iOS11發(fā)現(xiàn)titleView支持autolayout,這要求titleView必須是能夠自撐開的或?qū)崿F(xiàn)了- intrinsicContentSize方法

- (CGSize)intrinsicContentSize {
    return UILayoutFittingExpandedSize;
}

這里補(bǔ)充一個(gè)關(guān)于intrinsicContentSize知識(shí)點(diǎn)鏈接
http://blog.csdn.net/hard_man/article/details/50888377

1.2 使用FDTemplateLayoutCell 在IOS11上計(jì)算的cell高度不對(duì)


這是因?yàn)镮OS11上默認(rèn)是開啟了cell的高度估算機(jī)制,關(guān)閉即可。

    _tableView.estimatedRowHeight = 0;
    _tableView.estimatedSectionFooterHeight = 0;
    _tableView.estimatedSectionHeaderHeight = 0;

二、Iphone X 適配


官方IphoneX適配文檔

2.1 啟動(dòng)頁(yè)的適配

iPhone X采用的和iPhone 6p一樣的@3x的圖,而不是傳說(shuō)中的@4x圖。
如果你是用的是LaunchImage來(lái)管理啟動(dòng)頁(yè),那就可以找設(shè)計(jì)妹子弄一張1125 * 2436分辨率的啟動(dòng)圖就行。如果你使用的是LaunchScreen來(lái)適配的啟動(dòng)頁(yè),聽我一句也去問(wèn)問(wèn)設(shè)計(jì)妹子吧,畢竟iPhone X的高寬比(iPhone X采用了iPhone 8的寬,卻比iPhone 8p都要高)發(fā)生了變化,拉伸了設(shè)計(jì)妹子的圖,會(huì)給你拼命的,
說(shuō)的那么多廢話,就一點(diǎn)是重要的iPhone X 的屏幕平尺變?yōu)?125 * 2436
`

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容