如何通过向它们添加组件来使滚动器内的视图自动调整大小? - 斯威夫特 3

Posted

技术标签:

【中文标题】如何通过向它们添加组件来使滚动器内的视图自动调整大小? - 斯威夫特 3【英文标题】:How to make views inside scrollers automatically resize by adding components to them? - Swift 3 【发布时间】:2016-11-14 13:53:56 【问题描述】:

我有一个滚动条,里面有一个叫做 ContentView 的 UIView 元素。在 ContentView 内部,我有一个 StackView,里面充满了动态创建的按钮。我以编程方式将按钮添加到 StackView,我还将每个按钮分配给 StackView:

self.stackView.addSubview(btn)

按钮出现在运行时,但是它们不可点击,我诊断为是因为它们被添加到 ContentView 和 StackView 边界之外。我尝试使用:

self.stackViewButtons.autoresizingMask = UIViewAutoresizing.flexibleWidth
self.contentView.autoresizingMask = UIViewAutoresizing.flexibleWidth

但是 contentView 和 stackView 总是保持相同的大小。

编辑:

情节提要中的约束:

UIScrollView 有一个元素:ContentView,它有 4 个约束 - 顶部、底部、前导和尾随设置到 superView - UIScrollView。 (所有 4 设置为 0)。还有从 ContentView 到 superView 水平居中的垂直约束 - UIScrollView。 StackView 应该包含所有按钮 - 它有 4 个约束(顶部 - 13,底部 - 13,前导 - 10,尾随 - 10)设置为超级视图,即 ContentView。

我在其他视图中的滚动条可以很好地处理这些约束,但是我确切地知道我将拥有的按钮数量,因此我在情节提要中创建它们并在代码中更改它们的约束,而现在我必须从编码。

【问题讨论】:

你在使用约束吗?如果有,请分享。 【参考方案1】:

好的,如果有人路过,this 对我帮助很大 - 向下滚动到动态堆栈视图。我正在使用自动布局,并且我正在向 stackView 动态添加按钮,我的错误是我正在使用

self.stackView.addSubview(btn)

代替:

self.stackView.addArrangedSubview(btn)

使用 addSubview 导致滚动条上的内容始终与运行前一样。

【讨论】:

以上是关于如何通过向它们添加组件来使滚动器内的视图自动调整大小? - 斯威夫特 3的主要内容,如果未能解决你的问题,请参考以下文章

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

UITextView 使用自动布局动态扩展为滚动视图内的文本

如何使滚动视图上的页面自动旋转?

滚动视图内的约束

自定尺寸表视图

网格项目渲染器内的显示/隐藏按钮