UIScrollViews 子视图没有在纵向到横向方向更改上调整自己的大小
Posted
技术标签:
【中文标题】UIScrollViews 子视图没有在纵向到横向方向更改上调整自己的大小【英文标题】:UIScrollViews subviews not resizing themselves on Portrait to Landscape Orientation Change 【发布时间】:2014-01-09 10:16:04 【问题描述】:在我的应用程序中,我有一个层次结构,如主视图 -> UIScrollView -> UISearchBar。搜索栏覆盖整个屏幕宽度。但是当它切换到横向时,滚动视图会根据横向调整自身并覆盖整个屏幕,但它的子视图(如 UISearchBar 宽度)与纵向相同。另外,我正在使用 Autolayout,并且在情节提要中正确设置了它们的约束(前导和尾随、宽度(大于等于 320)等)。
我也知道在 SO 中有几个答案,但几乎每个人都说在 willAutororate 中再次设置宽度。但是我在 UIScrollview 中有大约 15 个子视图,我认为这些子视图无法以编程方式设置(如增加 LOC),而且我认为 Autolayout 必须有一些解决方案。
【问题讨论】:
我会解释它,但我认为这家伙比我做得更好。 codehappily.wordpress.com/2013/11/14/… 不过,如果要设置子视图的约束,可以在子视图上运行 for-in 循环。 【参考方案1】:滚动视图不能很好地配合约束。这是一种使用约束和 Interface Builder 的方法,该方法对我来说具有 vertically 滚动滚动视图,不需要任何手动或内容大小调整并适用于旋转:
使用约束定位的视图控制器中的滚动视图 一个容器 (UIView),它是滚动视图的 子视图,其位置带有将每个边缘固定到父视图的约束 改为将所有其他子视图添加到容器视图中。使用约束。超过scrollview的高度以获得垂直滚动的scrollview。但是有一个技巧可以让旋转调整大小自动工作:
您必须向容器视图添加一个附加约束,以使其宽度与UIScrollview的宽度相匹配。很奇怪,您必须这样做,因为将每一侧固定到滚动视图应该可以解决问题,但是如果您不添加额外的约束,它将无法与旋转一起使用。这就是我的意思:
【讨论】:
同样的方法可以用于水平滚动scrollviews。只需为高度而不是宽度添加额外的约束,然后添加您的子视图以超过宽度以水平滚动。【参考方案2】:试试这个: 此问题将通过仅约束解决。我创建了一个项目并通过使用正确的约束它对我来说很好,
这里我将一一向您展示如何添加正确的约束:
仅像屏幕截图中那样添加滚动视图并为滚动视图添加约束:
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 设置为,即您的搜索栏?以上是关于UIScrollViews 子视图没有在纵向到横向方向更改上调整自己的大小的主要内容,如果未能解决你的问题,请参考以下文章
在 iPhone 中将视图从纵向切换到横向,就像 iPhone 中的计算器一样
UIPageViewController 作为子视图,横向双页,纵向单页
当我在 iOS7 的 iPad 中将视图从纵向旋转到横向或反之亦然时,UITextfield shouldChangeCharactersInRange 没有调用