隐藏导航栏时添加在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已经能够正常显示了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值