【问题标题】:iOS 7 - UITableViewController with search is under status bariOS 7 - 带有搜索的 UITableViewController 在状态栏下
【发布时间】:2013-09-11 16:37:01
【问题描述】:

我有一个带有嵌入式 UISearchDisplayController 的 UITableViewController。在 iOS 7 中,搜索框位于状态栏下方。 interface builder 中是否有办法抵消 tableview 以便搜索栏不被状态栏覆盖(并且仍然使用 UITableViewController 和 UISearchDisplayController 设置)?

【问题讨论】:

  • 在情节提要中,您是否尝试将视图控制器的“状态栏”更改为无?
  • 在模拟指标中将状态栏设置为无在应用运行时无效。

标签: ios uitableview uisearchdisplaycontroller ios7


【解决方案1】:
self.edgesForExtendedLayout=UIRectEdgeNone;

应该解决这个问题。

【讨论】:

  • 如果您的 uitableview 显示在导航栏下方,则此方法有效
  • 但现在我也遇到了 uitableview 延伸到底部标签栏下方的问题。你会如何解决这个问题?是的,我可以将高度设置为在标签栏上方结束,但是在 iOS 6 上看起来不正确
  • 您可以使用 [[UIScreen mainScreen]bounds] 获取屏幕高度,然后调整 UITableView 的大小。
【解决方案2】:

您必须将其嵌入UINavigationController,然后嵌入navVC,只需取消选中Shows Navigation Bar

【讨论】:

  • 结合@Filippo 的行 (self.edgesForExtendedLayout=UIRectEdgeNone; in -viewDidLoad) 最终对我有用。
  • 你确定吗,如果你不使用那条线会怎样?
【解决方案3】:

感觉有点老套,但这个对我有用:

[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)];

}

【讨论】:

  • 这对我不起作用。你能解释一下在 tableview 上设置 content inset 是如何改变 UISearchDisplayController 的 UISearchBar 的框架的吗?
【解决方案4】:

将以下代码放入您的 viewcontroller 的 viewdidload。

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) 
{
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars = NO;
        self.automaticallyAdjustsScrollViewInsets = NO;
}

【讨论】:

    【解决方案5】:
    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)];
        }
    }
    

    【讨论】:

      【解决方案6】:

      我不得不调整 tableview 的 contentOffsetcontentInset。由模态 segue 触发的我的 tableviewcontroller 已经嵌入到故事板上游的导航控制器中。通过状态栏的高度调整内容插入和通过搜索栏的高度调整内容偏移显示从第一个单元格开始的表格视图。当用户拉下 tableview 时会显示搜索栏。

      self.tableView.contentOffset = CGPointMake(0, 44.0);
      self.tableView.contentInset = UIEdgeInsetsMake(20.0, 0.0, 0.0, 0.0);
      

      【讨论】:

        【解决方案7】:

        我找到了罪魁祸首。将布局选项“调整滚动视图插图”设置为打开就可以了。

        【讨论】:

        • 1) 你指的是什么“布局选项” 2) 我在任何地方都找不到“调整滚动视图插图”,你能把我的眼睛指向正确的视图吗?感谢您的帮助
        • 您可以在这张图片中看到选项!link
        • 这只会影响我在 tabbarcontroller 中设置的视图。该选项已打开,但没有效果。
        【解决方案8】:

        您所要做的就是选择您的 UITableView 所在的视图控制器并显示属性检查器。在 Attributes Inspector 中,取消选中 Extend Edges -> Under Top Bars 和 Under Bottom Bars。当我的 UITableview 在导航栏和标签栏下方加载时,这对我有用

        【讨论】:

          【解决方案9】:

          数据加载到表格视图后,只需在 iOS 6 / 7 中调用它

          [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];

          但请确保将搜索栏作为标题添加到表格视图中

          【讨论】:

            猜你喜欢
            • 2013-09-26
            • 2013-10-13
            • 2015-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多