Interface Builder 对 UIScrollView 的正确约束是啥?来自 IB 的纯自动布局

Posted

技术标签:

【中文标题】Interface Builder 对 UIScrollView 的正确约束是啥?来自 IB 的纯自动布局【英文标题】:What are the correct constraints on UIScrollView from Interface Builder? Pure Autolayout from IBInterface Builder 对 UIScrollView 的正确约束是什么?来自 IB 的纯自动布局 【发布时间】:2015-12-20 07:47:40 【问题描述】:

我已经尝试让ScrollView 工作 2 天了,但它根本不起作用。 SO和其他网站上的大多数建议都说您需要将ScrollView固定到root view,然后在ScrollView内放置一个ContentView (UIView),然后将其固定到ScrollView的所有侧面(所以scroll size 可以确定 contentSize... 但是这没有任何作用)。那里也有相互矛盾的信息,one video 表示需要从ScrollView 的底部到ContentView 的约束。这两种解决方案都不适合我。以下是我在尝试过的大多数组合中一直在做的事情:

    UIView -> UIScrollViewUIScrollView 的所有边固定到 UIView 在UIScrollView 中创建一个UIView(命名为content view)和placeUIView 的所有侧面固定到UIScrollView

此时的问题:UIScrollView 需要 constraints 用于 Xwidth AND Ywidth。唯一似乎解决投诉的方法是将UIView 设置在scroll view 内,水平和垂直居中,但这对滚动工作没有任何帮助。另一种选择是将UIView 设置为等于heightwidthscroll view,但同样,除了删除投诉之外没有任何作用。

我不明白。不是固定边,设置约束吗? IB 好像觉得不是这样的。

需要哪些正确的约束?我只需要一个简单的视图,其中包含堆叠的controls(填写表格),如果表格比screen 长,屏幕需要能够scroll

我是第一次使用 ios,目前纯粹从 IB 构建...最好的代码最少的解决方案。

【问题讨论】:

作为您链接的视频的创建者,我确信它描述了一种工作技术。发布您的布局和约束的屏幕截图。也许给一个测试故事板的链接。 我确认@robmayoff 发布了正确且完整的解决方案。 @robmayoff 确实有效。我缺少的是在 ContentView 上对齐中心 X 以查看。现在可以了,谢谢。它是偶然添加的……通过“添加缺少的约束”。 【参考方案1】:

你已经成功了一半。首先你需要决定你要在滚动视图中显示什么,你已经放置了一个内容视图,它需要有一个内在的大小。您可以选择放置静态或动态视图。静态视图将在设计时定义其大小,这将解决 UIScrollView AutoLayout 约束。相反,如果您在运行时使用动态视图执行此操作,则需要为内容视图选择默认大小,为视图的宽度和/或高度创建一个 IBOutlet,然后在运行时调整它们的大小,更改 viewDidLayoutSubviews 中的出口。您链接的视频非常清楚地说明了这一点。

【讨论】:

以上是关于Interface Builder 对 UIScrollView 的正确约束是啥?来自 IB 的纯自动布局的主要内容,如果未能解决你的问题,请参考以下文章

如何处理未知的 UILabel 高度及其对 Interface Builder 中标签下方的影响?

在 Interface Builder 中布置项目

Xcode 的 Interface Builder 中的外部对象占位符丢失

Interface Builder 找不到 .xib - Xcode 5.0.2

使用 Interface Builder 构建的自定义 UIView 可通过 Interface Builder 访问/定位

Builder模式 和 Fluent Interface