UIView bringSubviewToFront为UIScrollView打破AutoLayout

时间:2014-04-29 19:06:00

标签: ios objective-c autolayout

我有一个相当简单的屏幕,我在屏幕顶部插入一个自定义UINavigationBar,下面是一个内容区域。我正在使用AutoLayout,我在视觉上声明了这种关系:

@"V:|-0-[_navBar(65)]-0-[_content]-0-|";

现在,这似乎完美无缺,直到我尝试从导航栏下方向下滑动另一个视图。导航栏包含搜索字段,我希望搜索结果从导航栏下滑下来。正如代码当前所示,搜索结果在导航栏的顶部或前面向下滑动,看起来很奇怪。所以我尝试使用以下方法将导航栏推到索引堆栈的顶部:

[self.view bringSubviewToFront:_navBar];

就动画而言,它完美无缺。搜索结果不再在导航栏上滑动,但它们位于内容区域的前面。当_content的孩子是UIView时,似乎没问题。但是,当_content的子节点是UIScrollView时,这似乎在导航栏和内容区域之间引入了20px的边距。老实说,虽然导航栏保持相同的高度,但空间似乎与状态栏非常接近。我尝试使用许多不同的技术将导航栏带到前面但是只要导航栏和内容区域位于不同的平面上,它似乎就会破坏上面定义的0px的自动布局约束。

Here is a sample project显示错误。看第三项“bringSubViewToFront bug”。

有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

20点空间似乎与status bar有关,但我不确定为什么将navigation bar带到前面会显然导致滚动视图插入它的内容。无论如何,在将导航栏带到前面后,我可以通过添加此行来修复它,

_scrollView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);