如何以编程方式使用 UIScrollView 使 UIStackView 滚动?

Posted

技术标签:

【中文标题】如何以编程方式使用 UIScrollView 使 UIStackView 滚动?【英文标题】:How to make UIStackView scroll with UIScrollView programmatically? 【发布时间】:2016-06-17 19:53:24 【问题描述】:

我已经看到了几种使UIStackViewUIScrollView 一起滚动的解决方案,但它们都依赖于 Autolayout 和 IB。

有没有办法以编程方式做到这一点?

我见过这个例子:https://gist.github.com/twostraws/a02d4cc09fc7bc16859c

但它使用可视格式语言,而我使用的是布局锚 API。

布局锚 API:

view.leadingAnchor.constraintEqualToAnchor(otherview.topAnchor).active = true

【问题讨论】:

基本上你需要做的就是在scrollview中添加stack view,并使scroll view的content view大于scroll view frame,从而使scroll view滚动!尝试提供 200x200 左右的安全屏幕尺寸,不要担心自动布局。 您能否提供一个代码示例,以便我将其标记为答案并实现它? 我在回答这个问题***.com/questions/31668970 时提供了一个使用布局锚点的示例 Is it possible for UIStackView to scroll?的可能重复 【参考方案1】:

我想做同样的事情,偶然发现了这个excellent post. 总结一下,将您的UIStackView 嵌入到您的UIScrollView 中,并通过设置UIStackView 的锚约束继续朝着您所想的方向前进匹配那些UIScrollView:

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

【讨论】:

相关问题但不重复:***.com/questions/31668970/…【参考方案2】:

你可以试试ScrollableStackView:https://github.com/gurhub/ScrollableStackView

示例代码 (Swift)

import ScrollableStackView

var scrollable = ScrollableStackView(frame: view.frame)
view.addSubview(scrollable)

// add your views with 
let rectangle = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 55))
rectangle.backgroundColor = UIColor.blue
scrollable.stackView.addArrangedSubview(rectangle)
// ...

示例代码(Objective-C)

@import ScrollableStackView

ScrollableStackView *scrollable = [[ScrollableStackView alloc] initWithFrame:self.view.frame];
scrollable.stackView.distribution = UIStackViewDistributionFillProportionally;
scrollable.stackView.alignment = UIStackViewAlignmentCenter;
scrollable.stackView.axis = UILayoutConstraintAxisVertical;
[self.view addSubview:scrollable];

UIView *rectangle = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 55)];
[rectangle setBackgroundColor:[UIColor blueColor]];

// add your views with
[scrollable.stackView addArrangedSubview:rectangle]; 
// ...

希望对你有帮助。

【讨论】:

以上是关于如何以编程方式使用 UIScrollView 使 UIStackView 滚动?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式设置 UIScrollView 以使用 autoLayout 水平滚动

Swift - 以编程方式将 UIScrollView 宽度设置为 100%

如何以编程方式在 UIScrollview 中创建 UIScrollview

如何以编程方式在UIScrollview中创建UIScrollview

如何以编程方式移动 UIScrollView 以集中在键盘上方的控件中?

UIScrollView 以编程方式滚动到底部