美文网首页
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