解決iOS11上因 Safe Area導(dǎo)致的UIScrollView偏移的問(wèn)題

iOS 11 設(shè)備上運(yùn)行出現(xiàn)最多問(wèn)題應(yīng)該就是 tableView 莫名奇妙地偏移了 20pt 或者 64pt。原因是 iOS 11 棄用了 automaticallyAdjustsScrollViewInsets 屬性,取而代之的是 UIScrollView 新增了 contentInsetAdjustmentBehavior 屬性,這一切的罪魁禍?zhǔn)锥际切乱氲?Safe Area。Safe Area 幫助我們將 view 放置在整個(gè)屏幕的可視的部分。即使把 navigationBar 設(shè)置為透明,系統(tǒng)也認(rèn)為安全區(qū)域是從 navigationBar 的 bottom 開(kāi)始的。

1506312020119835.png

解決方法

/**
在AppDelegate中didFinishLaunchingWithOptions或其他適當(dāng)位置調(diào)用以下方法即可解決
 解決iOS11上因安全區(qū)域?qū)е碌腢ITableView或UIScrollView偏移的問(wèn)題
 */
+ (void)dealWithiOS11SafeAreaIssue{
    //解決iOS11,僅實(shí)現(xiàn)heightForHeaderInSection,沒(méi)有實(shí)現(xiàn)viewForHeaderInSection方法時(shí),section間距大的問(wèn)題
    [UITableView appearance].estimatedRowHeight = 0;
    [UITableView appearance].estimatedSectionHeaderHeight = 0;
    [UITableView appearance].estimatedSectionFooterHeight = 0;
    
    //iOS11 解決SafeArea的問(wèn)題,同時(shí)能解決pop時(shí)上級(jí)頁(yè)面scrollView抖動(dòng)的問(wèn)題
    if (@available(iOS 11, *)) {
        [UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; //iOS11 解決SafeArea的問(wèn)題,同時(shí)能解決pop時(shí)上級(jí)頁(yè)面scrollView抖動(dòng)的問(wèn)題
    }
}
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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