UITearchBar上的UITableView奇怪的偏移问题

Sto*_*nz2 10 objective-c uitableview uisearchbar ios

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

表的搜索栏和内容偏移量非常奇怪,但它似乎取决于这些视图添加到xib中主视图的顺序.我创建了一个示例项目,只有我的表/搜索和标签才能测试,结果是一样的.在标签添加表格时,一切正常:

建立:

标签后添加的表格

正确和预期的结果:

适当的预期结果

但是,如果我只是更改我的2个子视图位于主视图(也就是在标签之前添加的表)的顺序,那么奇怪的事情就会开始发生.

显然不好的设置:

标签前添加的表格

搜索栏的奇怪偏移:

wtf是这个?!?!

我没有改变任何其他东西,那么为什么Xcode似乎关心这些子视图添加到主视图的顺序?如果我向上滚动"坏"表设置,搜索栏会立即在其顶部边缘消失,但表的内容将继续向上滚动,直到它到达xib中设置的帧的顶部.向下滚动,搜索栏不会重新出现,直到奇怪的降低位置.这是在Xcode 5.1.1中,而不是新的测试版.打开或关闭Autolayout时结果相同.

知道为什么会这样吗?这是一个错误,还是我错过了什么?(我没有发布任何代码,因为我所做的只是设置节,行和在单元格上设置文本的数量.不要弄乱内容插入,偏移,任何东西.我从应用程序委托加载视图导航控制器的根)

Mus*_*med 15

这是因为一个UIViewController人的财产叫做automaticallyAdjustsScrollViewInsets

在iOS 7中,UIViewControllers有一个名为automatedAdjustsScrollViewInsets的属性,默认为YES.如果您有一个滚动视图,它是视图控制器的根视图(例如使用UITableViewController)或索引为0的子视图,那么该属性将调整contentInset和scrollIndicatorInsets.这将允许您的滚动视图启动其内容并滚动导航栏下方的指示器(如果您的视图控制器位于导航控制器中).

来自Big Nerd Ranch

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

以下是苹果文档中的描述:

默认值为YES,允许视图控制器调整其滚动视图插入以响应状态栏,导航栏和工具栏或标签栏消耗的屏幕区域.如果要自行管理滚动视图插入调整,则设置为NO,例如视图层次结构中有多个滚动视图时.