我有一个带有嵌入式 UISearchDisplayController 的 UITableViewController。在 iOS 7 中,搜索框位于状态栏下方。界面构建器中是否有办法抵消表格视图,以便状态栏不覆盖搜索栏(并且仍然使用 UITableViewController 和 UISearchDisplayController 设置)?
9 回答
self.edgesForExtendedLayout=UIRectEdgeNone;
应该解决这个问题。
您必须将其嵌入到 a 中UINavigationController
,然后在 中navVC
,只需取消选中Shows Navigation Bar
感觉有点hacky,但这个对我有用:
[self.tableView setContentInset:UIEdgeInsetsMake(self.navigationController.navigationBar.frame.size.height + [[UIApplication sharedApplication] statusBarFrame].size.height, 0, 0, 0)];
如果你正在为两个方向工作:
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
[self.tableView setContentInset:UIEdgeInsetsMake(self.navigationController.navigationBar.frame.size.height + [[UIApplication sharedApplication] statusBarFrame].size.height, 0, 0, 0)];
}
将以下代码放在您的 viewcontroller 的 viewdidload 中。
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)
{
self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = NO;
self.automaticallyAdjustsScrollViewInsets = NO;
}
self.edgesForExtendedLayout = UIRectEdgeNone;
...
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
if (navigation.hiden) {
[self.tbview setContentOffset:CGPointMake(0, -20)];
[self.tbview setContentInset:UIEdgeInsetsMake(20, 0, 0, 0)];
}
else {
[self.tbview setContentOffset:CGPointMake(0, -20)];
[self.tbview setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
}
}
我不得不调整 tableview 的contentOffset
和contentInset
. 我的由模态 segue 触发的 tableviewcontroller 已经嵌入到故事板上游的导航控制器中。通过状态栏的高度调整内容插入和通过搜索栏的高度调整内容偏移显示从第一个单元格开始的表格视图。当用户拉下 tableview 时会显示搜索栏。
self.tableView.contentOffset = CGPointMake(0, 44.0);
self.tableView.contentInset = UIEdgeInsetsMake(20.0, 0.0, 0.0, 0.0);
我找到了罪魁祸首。将布局选项“调整滚动视图插图”设置为打开就可以了。
您所要做的就是选择您的 UITableView 所在的视图控制器并显示属性检查器。在 Attributes Inspector 中,取消选中 Extend Edges -> Under Top Bars 和 Under Bottom Bars。当我的 UITableview 在导航栏和标签栏下方加载时,这对我有用
在将数据加载到表视图后,只需在 iOS 6 / 7 中调用它
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop 动画:NO];
但请确保将搜索栏作为标题添加到表视图中