Swift 以编程方式向UIStackView添加更多标签
我有一个包含一个标签的视图。我想在UIStackView中显示标签(徽章)列表。在第一个徽章上,我更新第一个标签,在其他徽章上,我复制第一个徽章,并使用addSubview将其添加到UIStackView。它似乎在工作,但它只显示最后一项,而不是显示全部 我的想法是让堆栈视图中的第一个标签在故事板中完成,这样我就可以轻松地设置它的样式,然后在代码中克隆它。不确定这是否是一个好方法Swift 以编程方式向UIStackView添加更多标签,swift,xcode,Swift,Xcode,我有一个包含一个标签的视图。我想在UIStackView中显示标签(徽章)列表。在第一个徽章上,我更新第一个标签,在其他徽章上,我复制第一个徽章,并使用addSubview将其添加到UIStackView。它似乎在工作,但它只显示最后一项,而不是显示全部 我的想法是让堆栈视图中的第一个标签在故事板中完成,这样我就可以轻松地设置它的样式,然后在代码中克隆它。不确定这是否是一个好方法 import UIKit class SessionFullResultViewController: UIVie
import UIKit
class SessionFullResultViewController: UIViewController {
@IBOutlet weak var badgesStackView: UIStackView!
@IBOutlet weak var badge1: UILabel!
override func viewDidLoad() {
...
...
new_badges.enumerated().forEach { (index, badge) in
if (index == 0) {
self.badge1.text = badge.info
}
else {
var newbadge = self.badge1
newbadge?.text = badge.name
self.badgesStackView.addSubview(newbadge!)
}
}
}
}
您需要按照impression7vx的建议,为每个要插入的文本创建一个新的标签实例,并使用
addArrangedSubview
方法
尝试将代码更改为
new_badges.enumerated().forEach { (index, badge) in
if (index == 0) {
self.badge1.text = badge.info
} else {
var newbadge = UILabel(frame: badge1.frame)
newbadge.text = badge.name
self.badgesStackView.addArrangedSubview(newbadge)
}
// Refresh the stack view at the end
if index == new_badges.count - 1 {
self.badgesStackView.layoutIfNeeded()
}
}
我不知道你想要什么样的布局,但是,有一个动态的元素列表
通常最好使用
UITableView
我不相信您在使用var newade=self.bade1时实际上是在复制。您需要使UILabel
可复制并创建实际副本。不是100%确定这会解决问题,但可能是一个开始。要检查这一点,您只需执行else{var newLabel=UILabel(frame:badge1.frame)newLabel.text=“ABRACADABRA”self.stackview.addsubview(newLabel)}