开发中需要隐藏导航栏,让UITableView的y为0,设置UITableView的frame为(0, 0, screenWidth, screenHeight)后,通常状态栏会有一部分留白。如下图
解决方法:在viewDidLoad或者在创建UITableView 设置:
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
- (BaseTableView *)tableView
{
if (_tableView == nil) {
_tableView = [[BaseTableView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];
_tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
_tableView.showsHorizontalScrollIndicator = NO;
_tableView.showsVerticalScrollIndicator = NO;
_tableView.tableHeaderView = self.headView;
_tableView.delegate = self;
_tableView.dataSource = self;
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
}
return _tableView;
}
即可解决!
另外再额外讲一个导航栏隐藏显示问题:
在viewWillAppear里隐藏:[self.navigationController setNavigationBarHidden:YES animated:YES];
在viewWillDisappear里显示:[self.navigationController setNavigationBarHidden:NO animated:YES];
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}