首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIStackView可以滚动吗?

UIStackView可以滚动吗?
EN

Stack Overflow用户
提问于 2015-07-28 14:36:33
回答 11查看 136.7K关注 0票数 248

假设我在UIStackView中添加了更多可以显示的视图,如何才能使UIStackView滚动?

EN

回答 11

Stack Overflow用户

发布于 2015-07-29 13:05:02

正如Eik所说,UIStackViewUIScrollView在一起玩得很好,参见here

关键是UIStackView处理不同内容的可变高度/宽度,然后UIScrollView很好地完成滚动/弹出内容的工作:

代码语言:javascript
复制
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    scrollView.contentSize = CGSize(width: stackView.frame.width, height: stackView.frame.height)       
}
票数 16
EN

Stack Overflow用户

发布于 2017-04-14 17:05:23

我也想做同样的事情,但我偶然发现了这个excellent post.,如果你想用锚API通过编程来做这件事,这就是我要做的。

总之,将UIStackView嵌入到UIScrollView中,并将UIStackView的锚点约束设置为与UIScrollView的锚点约束相匹配

代码语言:javascript
复制
stackView.leadingAnchor.constraintEqualToAnchor(scrollView.leadingAnchor).active = true
stackView.trailingAnchor.constraintEqualToAnchor(scrollView.trailingAnchor).active = true
stackView.bottomAnchor.constraintEqualToAnchor(scrollView.bottomAnchor).active = true
stackView.topAnchor.constraintEqualToAnchor(scrollView.topAnchor).active = true
stackView.widthAnchor.constraintEqualToAnchor(scrollView.widthAnchor).active = true
票数 11
EN

Stack Overflow用户

发布于 2019-02-07 18:21:43

水平滚动(UIScrollView中的UIStackView)

用于水平滚动。首先,创建一个UIStackView和一个UIScrollView,并通过以下方式将它们添加到视图中:

代码语言:javascript
复制
let scrollView = UIScrollView()
let stackView = UIStackView()

scrollView.addSubview(stackView)
view.addSubview(scrollView)

记住在UIStackViewUIScrollView上将translatesAutoresizingMaskIntoConstraints设置为false

代码语言:javascript
复制
stackView.translatesAutoresizingMaskIntoConstraints = false
scrollView.translatesAutoresizingMaskIntoConstraints = false

为了让一切正常工作,UIStackView的尾部锚点、前导锚点、顶部锚点和底部锚点应该等于UIScrollView锚点:

代码语言:javascript
复制
stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
stackView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true

但是UIStackView的宽度锚点必须等于或大于UIScrollView锚点的宽度:

代码语言:javascript
复制
stackView.widthAnchor.constraint(greaterThanOrEqualTo: scrollView.widthAnchor).isActive = true

现在锚定您的UIScrollView,例如:

代码语言:javascript
复制
scrollView.heightAnchor.constraint(equalToConstant: 80).isActive = true
scrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true

scrollView.bottomAnchor.constraint(equalTo:view.safeAreaLayoutGuide.bottomAnchor).isActive = true
scrollView.leadingAnchor.constraint(equalTo:view.leadingAnchor).isActive = true
scrollView.trailingAnchor.constraint(equalTo:view.trailingAnchor).isActive = true 

接下来,我建议尝试以下UIStackView对齐和分布设置:

代码语言:javascript
复制
topicStackView.axis = .horizontal
topicStackView.distribution = .equalCentering
topicStackView.alignment = .center

topicStackView.spacing = 10

最后,您需要使用addArrangedSubview:方法向UIStackView添加子视图。

文本插入

您可能会发现另一个有用的特性是,因为UIStackView保存在UIScrollView中,所以您现在可以访问文本插入,从而使内容看起来更漂亮。

代码语言:javascript
复制
let inset:CGFloat = 20
scrollView.contentInset.left = inset
scrollView.contentInset.right = inset

// remember if you're using insets then reduce the width of your stack view to match
stackView.widthAnchor.constraint(greaterThanOrEqualTo: topicScrollView.widthAnchor, constant: -inset*2).isActive = true
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31668970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档