【问题标题】:UIScrollViews subviews not resizing themselves on Portrait to Landscape Orientation ChangeUIScrollViews 子视图没有在纵向到横向方向更改上调整自己的大小
【发布时间】:2014-01-09 10:16:04
【问题描述】:

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

我也知道在 SO 中有几个答案,但几乎每个人都说在 willAutororate 中再次设置宽度。但是我在 UIScrollview 中有大约 15 个子视图,我认为这些子视图无法以编程方式设置(如增加 LOC),而且我认为 Autolayout 必须有一些解决方案。

【问题讨论】:

标签: ios uiscrollview autolayout landscape


【解决方案1】:

滚动视图不能很好地配合约束。这是一种使用约束和 Interface Builder 的方法,该方法对我来说具有 vertically 滚动滚动视图,不需要任何手动或内容大小调整并适用于旋转:

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

但是有一个技巧可以让旋转调整大小自动工作:

  • 您必须向容器视图添加一个附加约束,以使其宽度与UIScrollview的宽度相匹配。很奇怪,您必须这样做,因为将每一侧固定到滚动视图应该可以解决问题,但是如果您不添加额外的约束,它将无法与旋转一起使用。

这就是我的意思:

【讨论】:

  • 同样的方法可以用于水平滚动scrollviews。只需为高度而不是宽度添加额外的约束,然后添加您的子视图以超过宽度以水平滚动。
【解决方案2】:

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

这里我将一一向您展示如何添加正确的约束:

  1. 仅像屏幕截图中那样添加滚动视图并为滚动视图添加约束:

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:

【讨论】:

  • 它工作正常。我忘了输入水平居中对齐。谢谢
【解决方案3】:

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

【讨论】:

  • 您是否尝试将 autoresizingMask = UIViewAutoresizingFlexibleWidth 设置为,即您的搜索栏?
猜你喜欢
  • 2011-08-29
  • 2011-01-20
  • 1970-01-01
  • 2018-04-13
  • 2014-11-02
  • 2011-09-05
  • 2017-02-21
  • 1970-01-01
  • 2011-10-22
相关资源
最近更新 更多