无码专区一区人妻|人妻系列一区二区播放|国产免费牲交大片高清|日韩黄色无码一区二区三区|久久精品国产亚洲二区三区|欧美综合在线一区二区三区|精品无码国产自产拍在线观看蜜|999zyz精品视频在线播放

您當(dāng)前的位置 :寧夏資訊網(wǎng) > 消費(fèi) >  內(nèi)容正文
投稿

博客 - CocoaChina

寧夏資訊網(wǎng) 2020-04-29 08:13:56 來源: 閱讀:-

一.bug展示

Xcode 升級(jí)到 版本后,公司中的項(xiàng)目運(yùn)行到iOS11的設(shè)備上出現(xiàn)了一個(gè)UI Bug,原來自動(dòng)適配tableview的內(nèi)間距失效了. 很顯然,tableView有了額外的內(nèi)邊距.代碼運(yùn)行到之前的環(huán)境上是沒問題的,可用Xcode9一編譯,再跑到iOS11上就會(huì)出現(xiàn)問題...

二.問題產(chǎn)生原因

先貼一段設(shè)置tableView的代碼

private func setupTableView() { tableView = UITableView() tableView.frame = view.bounds tableView.dataSource = self tableView.delegate = self tableView.backgroundColor = UIColor.red extendedLayoutIncludesOpaqueBars = true; automaticallyAdjustsScrollViewInsets = false; // 設(shè)置tableView的內(nèi)邊距(能夠顯示出導(dǎo)航欄和tabBar下覆蓋的內(nèi)容) tableView.contentInset = UIEdgeInsetsMake(64, 0, 49, 0) // 設(shè)置內(nèi)容指示器(滾動(dòng)條)的內(nèi)邊距 tableView.scrollIndicatorInsets = tableView.contentInset } 關(guān)于extendedLayoutIncludesOpaqueBars和automaticallyAdjustsScrollViewInsets

這兩個(gè)屬性屬于UIViewController 默認(rèn)情況下extendedLayoutIncludesOpaqueBars = false 擴(kuò)展布局不包含導(dǎo)航欄 默認(rèn)情況下automaticallyAdjustsScrollViewInsets = true 自動(dòng)計(jì)算滾動(dòng)視圖的內(nèi)容邊距 但是,當(dāng) 導(dǎo)航欄 是 不透明時(shí),而tabBar為透明的時(shí)候,為了正確顯示tableView的全部內(nèi)容,需要重新設(shè)置這兩個(gè)屬性的值,然后設(shè)置contentInset(參考代碼). 上面的代碼邏輯沒有問題,但是放到iOS11 上為啥錯(cuò)了呢? 找了半天,點(diǎn)開了automaticallyAdjustsScrollViewInsets 這個(gè)屬性,發(fā)現(xiàn)這個(gè)屬性在iOS11過期了,如圖:

在OC的聲明中,這個(gè)屬性是這樣的: @property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets API_DEPRECATED_WITH_REPLACEMENT("Use UIScrollView's contentInsetAdjustmentBehavior instead", ios(),tvos()); // Defaults to YES 這說明在iOS11 中, UIViewController的automaticallyAdjustsScrollViewInsets屬性已經(jīng)不再使用,我們需要使用UIScrollView的 contentInsetAdjustmentBehavior 屬性來替代它.

關(guān)于contentInsetAdjustmentBehavior

@available(iOS 11.0, *) public enum UIScrollViewContentInsetAdjustmentBehavior : Int {

case automatic // Similar to .scrollableAxes, but will also adjust the top & bottom contentInset when the scroll view is owned by a view controller with automaticallyAdjustsScrollViewContentInset = YES inside a navigation controller, regardless of whether the scroll view is scrollable

case scrollableAxes // Edges for scrollable axes are adjusted (i.e., contentSize.width/height > frame.size.width/height or alwaysBounceHorizontal/Vertical = YES)

case never // contentInset is not adjusted

case always // contentInset is always adjusted by the scroll view's safeAreaInsets

} UIScrollViewContentInsetAdjustmentBehavior 是一個(gè)枚舉類型,值有以下幾種:

automatic 和scrollableAxes一樣,scrollView會(huì)自動(dòng)計(jì)算和適應(yīng)頂部和底部的內(nèi)邊距并且在scrollView 不可滾動(dòng)時(shí),也會(huì)設(shè)置內(nèi)邊距. scrollableAxes 自動(dòng)計(jì)算內(nèi)邊距. never不計(jì)算內(nèi)邊距 always 根據(jù)safeAreaInsets 計(jì)算內(nèi)邊距 很顯然,我們這里要設(shè)置為 never 三.開始適配

swift 中

private func setupTableView() { tableView = UITableView() tableView.frame = view.bounds tableView.dataSource = self tableView.delegate = self tableView.backgroundColor = UIColor.red

    extendedLayoutIncludesOpaqueBars = true;
    if #available(iOS 11.0, *) {
        tableView.contentInsetAdjustmentBehavior = .never
    } else {
        automaticallyAdjustsScrollViewInsets = false;
    };
    tableView.contentInset = UIEdgeInsetsMake(64, 0, 49, 0)
    tableView.scrollIndicatorInsets = tableView.contentInset

} OC 中

self.extendedLayoutIncludesOpaqueBars = YES; if (@available(iOS 11.0, *)) { self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } else { self.automaticallyAdjustsScrollViewInsets = NO; } _tableView.contentInset = UIEdgeInsetsMake(64, 0, 49, 0); _tableView.scrollIndicatorInsets = _tableView.contentInset;

(正文已結(jié)束)

推薦閱讀:西安信息網(wǎng)

免責(zé)聲明及提醒:此文內(nèi)容為本網(wǎng)所轉(zhuǎn)載企業(yè)宣傳資訊,該相關(guān)信息僅為宣傳及傳遞更多信息之目的,不代表本網(wǎng)站觀點(diǎn),文章真實(shí)性請(qǐng)瀏覽者慎重核實(shí)!任何投資加盟均有風(fēng)險(xiǎn),提醒廣大民眾投資需謹(jǐn)慎!

網(wǎng)站簡介 - 聯(lián)系我們 - 營銷服務(wù) - 老版地圖 - 版權(quán)聲明 - 網(wǎng)站地圖
Copyright.2002-2019 寧夏資訊網(wǎng) 版權(quán)所有 本網(wǎng)拒絕一切非法行為 歡迎監(jiān)督舉報(bào) 如有錯(cuò)誤信息 歡迎糾正