gpt4 book ai didi

ios - 代码中 subview 数量未知的 NSLayoutConstraint

转载 作者:行者123 更新时间:2023-11-29 00:48:18 24 4
gpt4 key购买 nike

我正在学习 iOS 编程,并或多或少地掌握了固定数量项目的自动布局。比如说,我们有一个 UILabel 用于标题,UILabel 用于副标题,那么约束的视觉格式是 'V:|-[title]-10-[subtitle]-|'

但是,如果我根据某些 API 响应动态创建 subview 会怎样。例如,我需要添加 40 个 subview 。我用视觉格式指定每个 subview 并跟踪它们不再现实了。什么是正确的方法?

我想在我添加每个 subview 之后,我会根据前一个 View 使用 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: 设置约束。这是要走的路,还是有更好的方法?

最佳答案

It's not realistic anymore that I specify each subview with the visual format and keep track of them

到底为什么不呢?您似乎认为这是某种“非此即彼”的情况。没有什么能阻止您使用可视格式来构建约束集合。没有法律规定您必须将所有约束放入一个视觉格式。

并且布局引擎不知道也不关心您用来形成约束的符号。约束就是约束!

考虑一下这段代码,我在其中构建了 ScrollView 及其内部三十个标签的约束:

    var con = [NSLayoutConstraint]()
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|[sv]|",
options:[], metrics:nil,
views:["sv":sv]))
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|[sv]|",
options:[], metrics:nil,
views:["sv":sv]))
var previousLab : UILabel? = nil
for i in 0 ..< 30 {
let lab = UILabel()
// lab.backgroundColor = UIColor.redColor()
lab.translatesAutoresizingMaskIntoConstraints = false
lab.text = "This is label \(i+1)"
sv.addSubview(lab)
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|-(10)-[lab]",
options:[], metrics:nil,
views:["lab":lab]))
if previousLab == nil { // first one, pin to top
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|-(10)-[lab]",
options:[], metrics:nil,
views:["lab":lab]))
} else { // all others, pin to previous
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:[prev]-(10)-[lab]",
options:[], metrics:nil,
views:["lab":lab, "prev":previousLab!]))
}
previousLab = lab
}
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:[lab]-(10)-|",
options:[], metrics:nil,
views:["lab":previousLab!]))
NSLayoutConstraint.activateConstraints(con)

我正在使用视觉格式,但在添加 View 时我一次只做一个约束(这正是您所要求的)。

关于ios - 代码中 subview 数量未知的 NSLayoutConstraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38398872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com