關(guān)于ios11和iphoneX ScrollView的適配

1.由于tableView 頭部視圖和尾部視圖出現(xiàn)一塊留白問題

有兩種辦法去掉留白:

1)tableViewstyle:UITableViewStyleGrouped類型凿滤,默認(rèn)tableView開頭和結(jié)尾是有間距的,不需要這個(gè)間距的話,可以通過實(shí)現(xiàn)heightForHeaderInSection方法(返回一個(gè)較小值:0.1)和viewForHeaderInSection(返回一個(gè)view)來去除頭部的留白萧恕,底部同理。

2)iOS 11上發(fā)生tableView頂部有留白,原因是代碼中只實(shí)現(xiàn)了heightForHeaderInSection方法怪与,而沒有實(shí)現(xiàn)viewForHeaderInSection方法。iOS 11之后應(yīng)該是由于開啟了估算行高機(jī)制引起了bug缅疟。添加上viewForHeaderInSection方法后分别,問題就解決了×裕或者添加以下代碼關(guān)閉估算行高茎杂,問題也得到解決。
可以在使用tableView的地方添上下面的代碼纫雁。

self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;

在我們的項(xiàng)目中由于項(xiàng)目工程量比較大煌往,所以我們?yōu)榱送祽校oTableView寫了一個(gè)分類:

#import "UITableView+YCEstimatedRowHeight.h"
#import <objc/runtime.h>

@implementation UITableView (YCEstimatedRowHeight)

+ (void)load {
    
    // 編譯時(shí)判斷SDK
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
        SEL selectors[] = {
            @selector(initWithFrame:style:),
        };
        for (NSUInteger index = 0; index < sizeof(selectors) / sizeof(SEL); ++index) {
            SEL originalSelector = selectors[index];
            SEL swizzledSelector = NSSelectorFromString([@"yc_" stringByAppendingString:NSStringFromSelector(originalSelector)]);
            
            Method originalMethod = class_getInstanceMethod(self, originalSelector);
            Method swizzledMethod = class_getInstanceMethod(self, swizzledSelector);
            
            BOOL addedSuccess = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
            if (addedSuccess) {
                class_replaceMethod(self, swizzledSelector,
                                    method_getImplementation(originalMethod),
                                    method_getTypeEncoding(originalMethod));
            } else {
                method_exchangeImplementations(originalMethod, swizzledMethod);
            }
        }
    });
#endif
}

- (instancetype)yc_initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
    if ([self yc_initWithFrame:frame style:style]) {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0
        self.estimatedRowHeight = 0;
        self.estimatedSectionFooterHeight = 0;
        self.estimatedSectionHeaderHeight = 0;
#endif
        if (iPhoneX) { // 加這句話的目的是防止在iphoneX上,底部的那條黑線擋住內(nèi)容
            self.contentInset = UIEdgeInsetsMake(0, 0, 20, 0);
        }
    }
    return self;
}
2.修改ios11上automaticallyAdjustsScrollViewInsets失效的問題

ios11給UIScrollView加了一個(gè)新的屬性 contentInsetAdjustmentBehavior 刽脖,可以通過設(shè)置這個(gè)屬性值來解決羞海。下面這種方式比較粗暴,因?yàn)閷?duì)于有的頁面不需要 automaticallyAdjustsScrollViewInsets 設(shè)置這個(gè)屬性曲管,所以選擇性使用却邓。

#import "UIScrollView+YCContentInset.h"
#import <objc/runtime.h>

@implementation UIScrollView (YCContentInset)

+ (void)load {
    
    // 編譯時(shí)判斷SDK
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
        SEL selectors[] = {
            @selector(initWithFrame:),
        };
        for (NSUInteger index = 0; index < sizeof(selectors) / sizeof(SEL); ++index) {
            SEL originalSelector = selectors[index];
            SEL swizzledSelector = NSSelectorFromString([@"yc_" stringByAppendingString:NSStringFromSelector(originalSelector)]);
            
            Method originalMethod = class_getInstanceMethod(self, originalSelector);
            Method swizzledMethod = class_getInstanceMethod(self, swizzledSelector);
            
            BOOL addedSuccess = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
            if (addedSuccess) {
                class_replaceMethod(self, swizzledSelector,
                                    method_getImplementation(originalMethod),
                                    method_getTypeEncoding(originalMethod));
            } else {
                method_exchangeImplementations(originalMethod, swizzledMethod);
            }
        }
    });
#endif
}

- (instancetype)yc_initWithFrame:(CGRect)frame {
    if ([self yc_initWithFrame:frame]) {
        if (IOS11) {
            self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        }
    }
    return self;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市院水,隨后出現(xiàn)的幾起案子腊徙,更是在濱河造成了極大的恐慌,老刑警劉巖檬某,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撬腾,死亡現(xiàn)場離奇詭異,居然都是意外死亡恢恼,警方通過查閱死者的電腦和手機(jī)民傻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來场斑,“玉大人漓踢,你說我怎么就攤上這事÷┮” “怎么了喧半?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锁保。 經(jīng)常有香客問我薯酝,道長半沽,這世上最難降的妖魔是什么爽柒? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮者填,結(jié)果婚禮上浩村,老公的妹妹穿的比我還像新娘。我一直安慰自己占哟,他們只是感情好心墅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榨乎,像睡著了一般怎燥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜜暑,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天铐姚,我揣著相機(jī)與錄音,去河邊找鬼肛捍。 笑死隐绵,一個(gè)胖子當(dāng)著我的面吹牛之众,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播依许,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼棺禾,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了峭跳?” 一聲冷哼從身側(cè)響起膘婶,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛀醉,沒想到半個(gè)月后竣付,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滞欠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年古胆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筛璧。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逸绎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夭谤,到底是詐尸還是另有隱情棺牧,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布朗儒,位于F島的核電站颊乘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏醉锄。R本人自食惡果不足惜乏悄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恳不。 院中可真熱鬧檩小,春花似錦、人聲如沸烟勋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卵惦。三九已至阻肿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沮尿,已是汗流浹背丛塌。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姨伤。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓哨坪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乍楚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子当编,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容