Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 以编程方式向UIStackView添加更多标签_Swift_Xcode - Fatal编程技术网

Swift 以编程方式向UIStackView添加更多标签

Swift 以编程方式向UIStackView添加更多标签,swift,xcode,Swift,Xcode,我有一个包含一个标签的视图。我想在UIStackView中显示标签(徽章)列表。在第一个徽章上,我更新第一个标签,在其他徽章上,我复制第一个徽章,并使用addSubview将其添加到UIStackView。它似乎在工作,但它只显示最后一项,而不是显示全部 我的想法是让堆栈视图中的第一个标签在故事板中完成,这样我就可以轻松地设置它的样式,然后在代码中克隆它。不确定这是否是一个好方法 import UIKit class SessionFullResultViewController: UIVie

我有一个包含一个标签的视图。我想在UIStackView中显示标签(徽章)列表。在第一个徽章上,我更新第一个标签,在其他徽章上,我复制第一个徽章,并使用addSubview将其添加到UIStackView。它似乎在工作,但它只显示最后一项,而不是显示全部

我的想法是让堆栈视图中的第一个标签在故事板中完成,这样我就可以轻松地设置它的样式,然后在代码中克隆它。不确定这是否是一个好方法

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)}