Swift - ScrollView 中的 StackView 不滚动

Posted

技术标签:

【中文标题】Swift - ScrollView 中的 StackView 不滚动【英文标题】:Swift - StackView in ScrollView doesn't scroll 【发布时间】:2019-07-22 08:27:12 【问题描述】:

我正在尝试在滚动视图中创建一个可滚动的堆栈视图,但它不起作用。

我已经建立了这样的结构:

如果看不到图片,这是结构: UIScrollView 在所有 4 个方向上都限制为超级视图 UIStackView(限制为所有 4 个方向的滚动视图 + 等宽) 图像集合视图(不受限制) UIStackView(不受约束) 标签堆栈(不受限制)

它不滚动,谁能看到我错过了什么?

【问题讨论】:

尝试使用约束修复图像集合视图的虚拟高度/宽度,看看是否是问题所在。 柏林老板您好!我试了一下,出现了一些奇怪的行为。视图就像在闪烁,但没有滚动。 如果可能,创建一个新项目,将此设计移入其中,捆绑它,上传并与我们分享链接。 好主意!谢谢,希望不会再遇到更多麻烦;) 【参考方案1】:

您应该在ScrollView 中设置ContentView,并使用以下约束:

ScrollView 的约束:

通往superView 跟踪到 superView 顶部到超级视图

从底部到超级视图

这些约束的常量是 0

ContentView 的约束:

通往superView 跟踪到 superView 顶部到超级视图

从底部到超级视图

与 ViewController 的 View 等高(位于视图层次结构的顶部)

与 ViewController 的 View 等宽

注意:您应该将 ContentView 的高度约束的优先级设置为 700 等(低于默认高度值)

注意:

您的 stackViews 和 collectionView 必须具有可滚动的高度。

我希望它有效。

享受吧。

【讨论】:

您好 Emre,感谢您的回答!我的 ScrollView 约束与您列出的一样。在我的 ContentView 中,我忘记了 equalHeight。所以我将它设置为相等的高度(到层次结构的顶视图)。然后我收到一个警告,collectionView 需要约束:Y 高度位置。所以我为 collectionView 添加了高度约束,但它没有用。然后我为“内部堆栈视图”添加了高度约束,但这也不起作用。我错过了什么,您需要查看更多代码/约束吗?在此先感谢,卡斯帕 如果滚动视图必须垂直滚动,则不应设置 ContentView 的高度。应该是从里面的数据推导出来的。 (即,每个视图应放下其高度,系统将计算最终高度。)。设置高度实际上会创建和冲突,然后根据优先级打破它。 有趣的是,当我有一个图像视图而不是集合视图时,我的代码/约束实际上已经起作用了。但是当我添加集合视图时它不起作用...... @CoderOgden 这意味着自动布局无法计算 UICollectionViews 的大小。这就是我要求现在设置高度和宽度约束并检查是否滚动的原因。将高度和宽度设置为很大的数字,以便视图溢出 我明白了!现在它起作用了。我没有限制堆栈视图的高度,而是设置我的 collectionView 的高度。谢谢你们!

以上是关于Swift - ScrollView 中的 StackView 不滚动的主要内容,如果未能解决你的问题,请参考以下文章

swift ScrollView中的图像

Swift - ScrollView 中的 StackView 不滚动

SWIFT - ScrollView 内的 WKWebView 中的 HTML 滚动事件

如何在 swift 中增加 ScrollView 中的 UITableView 高度

UITableViewCell中的Swift ScrollView不滚动

Swift - 如何对 ScrollView 中的项目使用自动布局?