转载自: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];
}
问题得到解决;