隱藏導航欄時新增在self.view上的Tableview位置產生20個單位的誤差
阿新 • • 發佈:2019-01-02
也許你已經發現了,當你隱藏了頁面中的導航欄,並且在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];
}
執行結果如下:
可以看到tableview已經能夠正常顯示了。