UITearchBar UITableView奇怪的抵消问题

我有一个UITableView有一个UISearchBar子视图。 这是一个UIViewController和其他一些子视图(标签,文本字段等)的视图。

表格的search栏和内容偏移量performance得相当奇怪,但它依赖于这些视图添加到xib主视图的顺序。 我创build了一个示例项目,只有我的表/search和一个标签为了testing,结果是一样的。 当表格添加标签后面时 ,一切正常。

build立:

表格后添加标签

正确和预期的结果:

适当的预期结果

然而 ,如果我只是改变了我的2个子视图在主视图上的顺序(也就是在标签之前添加的表),那么奇怪的事情就开始发生了。

显然不好的设置:

在标签之前添加了表

search栏奇怪的偏移量:

跆拳道是这个?!?!

我什么也没有改变,所以为什么Xcode似乎关心这些子视图添加到主视图的顺序? 如果向上滚动“坏”表格设置,search栏会立即在其顶部边缘消失,但表格内容将继续向上滚动,直到到达xib中设置的帧的顶部。 向下滚动,search栏不会再出现,直到奇怪的降低位置。 这是在Xcode 5.1.1,而不是新的testing版。 Autolayout打开或不打开的结果是相同的。

任何想法为什么发生这种情况? 这是一个错误,还是我错过了什么? (我没有发布任何代码,因为我所做的只是设置段数,行数,并设置单元格的文本,而不是搞乱内容的插入,偏移,任何东西。我加载视图从应用程序委托导航控制器的根目录)

发生这种情况是因为UIViewController的属性名为automaticallyAdjustsScrollViewInsets

在iOS 7中,UIViewControllers具有一个名为automatedAdjustsScrollViewInsets的属性,默认为YES。 如果你有一个滚动视图,它是你的视图控制器的根视图(例如UITableViewController)或索引为0的子视图,那么该属性将同时调整contentInset和scrollIndicatorInsets。 这将允许您的滚动视图开始其内容和导航栏下面的滚动指标(如果您的视图控制器在导航控制器中)。

从大书呆子牧场

如果您正在使用故事板,则可以通过select视图控制器来更改它,并在属性检查器中取消select“ Adjust scroll view insets

这里是从苹果文件描述:

默认值为YES,允许视图控制器响应状态栏,导航栏和工具栏或选项卡栏所消耗的屏幕区域来调整其滚动视图插图。 如果您想自己pipe理滚动视图插入调整(例如视图层次结构中有多个滚动视图),请将其设置为NO。

我之前有关于tableview和searchbar的位置的问题。 我尝试了以下,它适用于我。

如果你不写代码,如果只是xib或故事板的问题,那么尝试所有sockets的自动调整和原点设置来修复它的位置,看看不同之处。 它可能是为你工作。

在这里输入图像说明

UITableView头只能包含一个UIView,所以如果你需要UISearchBar加UILabel,你需要把它们包装到UIView中,并将这个视图添加为UITableView头。