runtime解决iOS11 tableview上移下移问题

runtime解决iOS11 tableview上移下移问题

给tableview创建一个分类,然后交换初始化方法

#import "UITableView+Ex.h"

@implementation UITableView (Ex)
+(void)load{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        SEL originalSelector = @selector(initWithFrame:style:);
        SEL swizzledSelector = @selector(mr_tableView_initWithFrame:style:);
        Method originalMethod = class_getInstanceMethod([self class], originalSelector);
        Method swizzledMethod = class_getInstanceMethod([self class], swizzledSelector);
        BOOL didAddMethod = class_addMethod([self class], swizzledSelector,method_getImplementation(swizzledMethod) , method_getTypeEncoding(swizzledMethod));
        if (didAddMethod)
        {
            class_replaceMethod([self class], swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
        }
        else
        {
            method_exchangeImplementations(originalMethod, swizzledMethod);
        }
    });
}

-(instancetype)mr_tableView_initWithFrame:(CGRect)frame style:(UITableViewStyle)style{
    UITableView *tableview = [self mr_tableView_initWithFrame:frame style:style];
    if (tableview) {
        if (@available(iOS 11.0, *)) {
            tableview.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        }
    }
    return tableview;
}
@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,226评论 30 472
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    琦均煞Sylar阅读 435评论 0 0
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,744评论 7 64
  • 学习力目前我还掌握的不够好,《好好学习》这本书也正在看。 但因为初步有了这个底层逻辑的认知,我觉得就是一个很大的提...
    雲端生活美学阅读 85评论 0 0