2018-07-10 隐藏导航栏时添加在self.view上的Tableview位置产生20个单位的误差

转载自:https://blog.csdn.net/yake_099/article/details/4714948

也许你已经发现了,当你隐藏了页面中的导航栏,并且在self.view上添加了一个tableview时,你的tableview的位置会向下偏20个单位,并且你怎么找都找不到问题所在。。。因为这就不是你的问题。

你会发现在ios7.1及以上的系统下都会存在这个bug(7.1版本以下我没有试过,可以自己试试),解决办法就是不要直接把你的tableview加在self.view上,而是先要在self.view上放上一个任意的子视图,再将tableview添加在self.view上,这样tableview就不是self.view的第一子视图了。归结为一句话就是滚动视图不能作为父视图的第一子视图。

产生bug的代码如下:

- (void)viewDidLoad {

    [super viewDidLoad];

    //只有当隐藏了导航栏才会出现这个bug,如果导航栏是显示的,则没有任何问题    [self.navigationController setNavigationBarHidden:YES];

    self.view.backgroundColor = [UIColor greenColor];

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

    tableview.backgroundColor = [UIColor greenColor];

    tableview.delegate = self;

    tableview.dataSource = self;

    [self.view addSubview:tableview];

}


添加任意子视图的代码如下:

- (void)viewDidLoad {

    [super viewDidLoad];

    //只有当隐藏了导航栏才会出现这个bug,如果导航栏是显示的,则没有任何问题    [self.navigationController setNavigationBarHidden:YES];

    self.view.backgroundColor = [UIColor greenColor];

    //在self.view上添加子视图    UIView * view = [[UIView alloc] initWithFrame:CGRectZero];

    [self.view addSubview:view];

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

    tableview.backgroundColor = [UIColor greenColor];

    tableview.delegate = self;

    tableview.dataSource = self;

    [self.view addSubview:tableview];

}

问题得到解决;

你可能感兴趣的:(2018-07-10 隐藏导航栏时添加在self.view上的Tableview位置产生20个单位的误差)