首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIStackView与自动排样锚的区别

UIStackView与自动排样锚的区别
EN

Stack Overflow用户
提问于 2020-07-09 14:09:08
回答 3查看 266关注 0票数 0

我刚开始学习UIStackView,并试图理解将自动布局单独应用于每个UI元素与使用堆栈视图之间的区别。

假设您有5个UILabels,并且希望将它们平分。我可以使用类似于“自动布局锚”这样的东西:

代码语言:javascript
复制
var previous: UILabel?

for label in [label1, label2, label3, label4, label5] {
    label.heightAnchor.constraint(equalToConstant: 88).isActive = true
    
    if let previous = previous {
        label.topAnchor.constraint(equalTo: previous.bottomAnchor, constant: 10).isActive = true
    } else {
        label.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true
    }
    
    previous = label
}

或视觉格式语言:

代码语言:javascript
复制
let viewsDictionary = ["label1": label1, "label2": label2, "label3": label3, "label4": label4, "label5": label5]
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[label1(labelHeight@999)]-[label2(label1)]-[label3(label1)]-[label4(label1)]-[label5(label1)]-(>=10)-|", options:[], metrics: metrics, views: viewsDictionary))

或者使用堆栈视图并沿主轴在equalSpacing设置分发设置。

这些都是粗略的例子,但我是否正确地理解了,您几乎可以使用自动布局锚或Visual语言完成堆栈视图所做的所有事情,但是堆栈视图可以使它更简单吗?

还是使用“自动布局锚”或“视觉格式语言”无法完成的堆栈视图有独享的好处?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-09 14:37:42

可视化格式语言具有很多的局限性。我的印象(可能是错的)是,苹果甚至不再开发它--它只是为了向后兼容。

对于简单的布局示例,您是正确的。您可以对循环执行与堆栈视图相同的操作。

然而..。假设您希望这5个标签垂直地在屏幕上居中?还是在另一个视野里?如果它们位于堆栈视图中,则简单地约束堆栈视图的位置。

或者,假设在运行时要添加更多的标签(或其他视图),或者在label2label3之间插入label2?有了你的环约束,你就有问题了。使用堆栈视图,stack.insertArrangedSubview(label2A, at: 2) (索引是基于零的)就完成了。

在设计复杂的UI时,堆栈视图还具有许多其他安排功能,使生活变得非常简单。

以搜索UIStackView为例--甚至浏览一些带有uistackview标记的帖子.我想你很快就会明白其中的优势。

票数 1
EN

Stack Overflow用户

发布于 2020-07-09 14:44:20

这两个元素的使用是可选的。StackView使实现更改项变得更容易(添加/删除)。正如您所写的,StackView是一种简化。有了约束,您可以获得与StackView相同的效果,但您将不得不感到有点累。

票数 1
EN

Stack Overflow用户

发布于 2020-07-09 14:46:55

由于所有UI控件都有自己的用途和用例,所以UIStackView可能可以实现它所做的一切,但是您将浪费大量时间:)。例如,UIStackView有5种发行版本,垂直和水平,可与所有自动布局功能一起使用,以支持各种屏幕大小等。

而且,它很可能比您编写的自定义代码更好地进行测试。代码行越少,越好:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62816785

复制
相关文章

相似问题

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