为 UIScrollView 设置约束

Posted

技术标签:

【中文标题】为 UIScrollView 设置约束【英文标题】:Setting constraints to UIScrollView 【发布时间】:2014-02-12 05:01:43 【问题描述】:

需要一些帮助来设置 UIScrollView 的约束。

我尝试按照此处的说明进行操作:https://developer.apple.com/library/ios/technotes/tn2154/_index.html(混合方法)。

为 UIScrollView 设置 4 面约束。 然后为 buttonContainer 设置 4 边约束。

这是结果:

但是 xcode 给出了这个错误信息:

如果我尝试 xcode 的建议,滚动视图要么不会滚动,要么根本不显示。

知道这里有什么问题吗?

【问题讨论】:

【参考方案1】:

您收到的消息会告诉您该怎么做。滚动视图设置其内容大小并通过将其子视图固定到滚动视图本身的约束变得可滚动。因此,这些限制必须提供足够的信息。您没有提供足够的内部约束来描述可滚动区域的高度和宽度(内容大小)。

换句话说,将约束视为按钮容器的大小由内向外。那就是你忽略了做的事情。例如,您可以简单地通过给 buttonContainer 一个绝对宽度约束和一个绝对高度约束来解决这个问题。如果内容是可滚动的,这些值需要大于滚动视图本身的大小。

【讨论】:

OP 正在尝试使用技术说明中 Apple 的混合方法。这甚至可以使用情节提要吗? @bilobatum 否,因为如果视图已经在故事板或 nib 中且自动布局已打开,则无法将视图的 translatesAutoresizingMaskIntoConstraints 属性设置为 NO。这就是为什么在 Apple 的混合方法中,内容视图是在代码中 创建的。但是,OP 可以执行“纯自动布局”方法,没问题,完全在故事板中 顺便说一下,看看我的downloadable example projects(来自我的书)可能会有所帮助,以了解如何使用自动布局完全在情节提要中配置滚动视图。您要查看的当前称为 bk2ch07p367scrollViewInNibAutolayoutbk2ch07p367scrollViewInNibAutolayout2。在运行它们时观察它们是否正确滚动,即使应用程序基本上没有代码;查看约束以了解其配置方式(通过两种不同的策略)。 @matt 谢谢我能够通过向buttonContainer 添加宽度和高度约束而不是将其固定到滚动视图来修复它。但是,在 iOS 6.1.3 中,当我弹出按钮显示在容器右侧的视图控制器时,内容开头的按钮会被剪掉。不过在 iOS 7 中它很好。有什么想法吗? 那将是一个完全不同的问题。

以上是关于为 UIScrollView 设置约束的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios 中为 UIScrollView 设置对齐方式

缩放和重绘 UIScrollView 内容后设置 contentOffset

xib设置UIScrollview

UIScrollView 忽略约束

为啥当我在 uiscrollview 顶部添加对象时,即使我将所有四个约束都设置为 0,对象也会下降一点?

UIScrollView ContentView动态高度约束