ios - UIScrollView 自动布局 - 仅垂直滚动

标签 ios uiscrollview autolayout

UIScrollView 在解释自动布局约束的方式上有点特殊,因为 subview 的几何填充其 contentSize 而不是 frame/界限。 Apple 在此处对此事进行了很好的描述:https://developer.apple.com/library/ios/technotes/tn2154/_index.html

我面临的问题是当我尝试将多行标签放入 scrollView 时。

示例约束如下所示:

scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[image(==imageWidth)]-15-[captionLabel]|", options: .AlignAllCenterY, metrics: metrics, views: views))

我没有显示由占用更多垂直空间的其他 scrollView.addConstraints() 调用处理的额外 subview 。

理想情况下,我希望两个元素都水平放置在屏幕内,并根据需要将 captionLabel 分成多行。相反,整个文本呈现为一行,scrollView 设置其 contentSize 以适应更大的宽度。

有哪些选项可以解决自动布局问题?

编辑:对于嵌套更多的 contentView 不太满意,所以我最终在单独的约束中设置了所需的标签宽度,并在 viewWillTransitionToSize 中对其进行了更新。在我的例子中,使用了一个类似标签“行”的完整列表,只有第一个标签的宽度通过计算约束设置,其余的设置为等于第一个标签。

最佳答案

首先,您的 View 层次结构应如下所示:

最重要的是你的 ScrollView 中只有一个 subview ,它将充当内容 View 。

hierarchy

约束:

ScrollView = 4 个从边缘到主视图的约束,间距为 0

ContentView = 4 从边缘到 ScrollView 的约束,间距为 0

并避免水平滚动

在ContentView和Main view(不是ScrollView)之间添加一个等宽的约束

现在将内容添加到您的内容 View 。像往常一样使用自动布局。不要忘记将标签的行数设置为 0,添加标签的顶部、右侧、左侧底部约束。

UILabel

结果应该和我的一样:

Scroll

更多信息:Using UIScrollView with Auto Layout in iOS

关于ios - UIScrollView 自动布局 - 仅垂直滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31439472/

相关文章:

ios - 左侧的 UITableView 滚动指示器

iOS 自动布局 UIScrollView 右侧多余空间

ios - 启动屏幕 xib

iphone - 开始编辑和键盘出现时在文本字段上滚动

ios - 用google direction api绘制路径

ios - 创建 Trover 样式库 iOS Swift

ios - 选择 QuickType 建议时如何移动到下一个文本字段?

ios - 自 IOS 8 使用自动布局和 ScrollView 以来额外的顶部空白

swift - 如何以编程方式对我在容器 View 中调用的 ViewController 施加约束?

具有不同单元类实例的 IOS UICollectionView 单元格