TableView滚动下方的顶部栏

自从我将我的应用更新到iOS 7新GUI后,我遇到了一个无法解决的问题。

我的应用程序包含一个可滚动的TableView。 麻烦的是TableView滚动下面的顶部栏,意味着表不考虑顶部栏并延伸到顶部并且看起来很难看。

在此处输入图像描述

我尝试删除“在顶栏下延伸边缘”的检查,但它是相同的。

我怎么解决这个问题?

一种解决方案是:将表视图的contentInsetscrollIndicatorInsets为具有20的顶部插入。表视图仍然会重置状态栏,但在完全滚动时它将完全可见。

如果您不喜欢该解决方案,并且您希望状态栏后面有一个永久空白区域,则必须更改固定/定位表格视图顶部的方式,以允许状态栏。 如何执行此操作取决于您是否使用自动布局。 如果你是,只需固定顶部布局指南。 如果不是,则必须使用nib编辑器中提供的“delta”字段。

但是,如果您使用的是UITableViewController,则不需要掌控表格视图的顶部; 它是一个全屏视图,它是视图控制器的主视图。 实际上,这是一个非常麻烦的情况。 我采用了两种解决方案:

  • 将整个事物放入UINavigationController中,以使导航栏为我“运行干扰”。

  • 或者,将表视图控制器嵌入到自定义父视图控制器中,以便我可以定位表视图的顶部。

在UINavigationController中,我创建了一个UIView,它位于状态栏下但位于嵌入式控制器(表格)的前面,因此表格在此视图后面消失,状态栏始终位于顶部。

 var patch: UIView! override func viewDidLoad() { super.viewDidLoad() patch = UIView(frame: CGRectMake(0, 0, view.bounds.width, 20)) patch.backgroundColor = UIColor.redColor() self.view.addSubview(patch) } 

然后我在屏幕进入横向时消失(在iOS9中,状态栏自动在横向中消失)并在屏幕进入纵向时重新出现。

 override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { if UIDevice.currentDevice().orientation.isLandscape.boolValue { patch.hidden = true } else { patch.hidden = false } }