[英]Add views to stackview programmatically in Swift
我有一個水平的 Stack View,它填滿了屏幕的整個寬度,並包含 3 個垂直的 StackView,在加載控制器時它們是空的。 水平對齊設置為填充和分布等間距,垂直對齊左、中、右和分布填充相等。 當用戶稍后導航回此場景時,我可能想要填充這些 StackView。 因此,我覆蓋了viewWillAppear
並在內部執行了以下操作:
DispatchQueue.global(qos: .userInitiated).async {
// here i need to load the data for the labels
DispatchQueue.main.async {
var label = UILabel()
label.text = //...
self.firstStackView.addArrangedSubview(label)
label = UILabel()
label.text = //...
self.secondStackView.addArrangedSubview(label)
var btn = UIButton()
btn.setTitle("X", for: .normal)
btn.addTarget(//...)
self.thirdStackView.addArrangedSubview(btn)
}
}
現在,我只看到第三個堆棧視圖的按鈕。 即使我多次這樣做,我也只能看到第一個按鈕。 我認為這是因為 stackviews 一開始是空的,並且它們的大小沒有更新。 我是否必須調用任何函數,以便它重新創建所有視圖? (但使用新的子視圖)
編輯:我找到了一個解決方法:我為故事板中的 3 個堆棧視圖中的每一個添加了一些標簽,然后在代碼中再次刪除它們。 它有效,但我認為這不是一個好的解決方案,如果我需要再次刪除標簽,堆棧視圖不會變小。 一定會有更好的辦法。
private var lbl1: UILabel!
private var lbl2: UILabel!
private var horizontalStackView: UIStackView!
private let setupLabelBlock = { () -> UILabel in
let label = UILabel()
label.textColor = .white
label.setFontSize(16)
label.textAlignment = .center
return label
}
private func setupSubviews() {
setupLabels()
setupHorizontalStackView()
}
private func setupLabels() {
lbl1 = setupLabelBlock()
lbl2 = setupLabelBlock()
}
private func setupHorizontalStackView() {
horizontalStackView = UIStackView(arrangedSubviews: [lbl1, lbl2])
horizontalStackView.axis = .horizontal
horizontalStackView.alignment = .fill
horizontalStackView.distribution = .fill
horizontalStackView.spacing = 2
}
根據要求調用setupSubviews
方法。 我希望,解決方案對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.