美文网首页
iOS11 Safe Area的注意点

iOS11 Safe Area的注意点

作者: 有血有肉的程序员 | 来源:发表于2017-10-27 19:55 被阅读83次

    iOS11的Safe Area的变化让适配变得很头痛。今天就发现一个奇怪的bug,是由safe area的变化引起的。

    直接上代码:

    - (void)viewDidLoad {

    [super viewDidLoad];

    self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];

    self.tableView.backgroundColor = [UIColor clearColor];

    self.tableView.delegate = self;

    self.tableView.dataSource = self;

    [self.view addSubview:self.tableView];

    }

    #pragma mark - UITableViewDataSource

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    if (indexPath.row == 0) {

    UITableViewCell *cell = [[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 40)];

    cell.backgroundColor = [UIColor redColor];

    return cell;

    }else{

    UITableViewCell *cell = [[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 40)];

    cell.backgroundColor = [UIColor greenColor];

    return cell;

    }

    }

    其余的省略...

    分别在6P iOS8.4、6PiOS11、iphoneX上跑

    会发现,只有iOS11以下的设备能够做到“顶头”布局。

    别急,看下原因:

    - (void)viewDidLoad{

    ......

    NSLog(@"%d",self.tableView.contentOffset.y);

    [self.view addSubview:self.tableView];

    }

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    NSLog(@"%d",self.tableView.contentOffset.y);

    }

    iphoneX(iOS11)在不滑动的情况下打出的log:

    比iOS8.4多了在scrollViewDidScroll的两次log,以下为打断点看到的栈信息(两次一样)。可见iOS11为挡住safe area的tableView自动调整了contentInset。

    相关文章

      网友评论

          本文标题:iOS11 Safe Area的注意点

          本文链接:https://www.haomeiwen.com/subject/djudpxtx.html