1. 程式人生 > >隱藏導航欄時新增在self.view上的Tableview位置產生20個單位的誤差

隱藏導航欄時新增在self.view上的Tableview位置產生20個單位的誤差

也許你已經發現了,當你隱藏了頁面中的導航欄,並且在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已經能夠正常顯示了。