UIScrollViews子视图不会在纵向到横向方向更改上调整自身大小

在我的应用程序中,我有一个层次结构,如主视图 – > UIScrollView – > UISearchBar。 搜索栏覆盖整个屏幕宽度。 但是当它切换到横向时,滚动视图会根据横向调整自身并覆盖整个屏幕,但其子视图如UISearchBar宽度保持与纵向相同。 另外我正在使用Autolayout并且我已经在故事板中正确设置了他们的约束(前导和尾随,宽度(大于等于320)等)。

另外我知道在SO中有几个答案,但几乎每个人都在willAutororate中再次说明设置宽度。 但我在UIScrollview中有大约15个子视图,我认为不可能以编程方式设置(增加LOC)加上我认为Autolayout必须有一些解决方案。

试试这个:这个问题只能通过约束来解决。 我创建了一个项目,并使用正确的约束, 它对我来说很好

在这里,我将向您展示如何逐个添加正确的约束:

  1. 添加scrollview并为scrollview添加约束,如屏幕截图所示:

在此处输入图像描述

2. now add search bar and add constraints for search bar too, here below you can find out complete constraints for scrollview and search together: 

在此处输入图像描述

滚动视图约束条件下不能很好地发挥作用。 这是一种使用约束和界面生成器的方法,这对我来说有一个垂直滚动的滚动视图,不需要任何手动或内容大小的finagling并使用旋转:

  • 在具有约束的视图控制器中的Scrollview
  • 一个容器(UIView),它是scrollview的子视图 ,定位时将每个边缘固定到superview
  • 将所有其他子视图添加到容器视图中。 使用约束。 超出scrollview的高度以获得垂直滚动的scrollview。

然而,有一个技巧可以让旋转resize自动工作:

  • 您必须向容器视图添加其他约束 ,以使其宽度与UIScrollview的宽度相匹配。 奇怪的是你必须这样做,因为将每一侧固定到scrollview应该可以做到这一点,但是如果你不添加额外的约束,它将不能用于旋转。

这就是我的意思:

UIScrollView在Interface Builder中有约束

您可以使用子视图的UIViewAutoresizing掩码(autoresizingMask属性)。