Swift 向Stackview添加视图,但Stackview的子视图彼此重叠

Swift 向Stackview添加视图,但Stackview的子视图彼此重叠,swift,for-loop,uistackview,Swift,For Loop,Uistackview,我需要使用“for in”循环向stackview添加视图。但是,stackview中的视图彼此重叠 addplantoPlanArray samply初始化一个视图并将其添加到PlanArray,然后使用“for in”循环将该数组中的每个视图添加到stackview中 代码如下: self.addPlantoPlanArray(IDText: "123123", Name: "abc", Participants: "abc", Duration: "abc", Price: "ab

我需要使用“for in”循环向stackview添加视图。但是,stackview中的视图彼此重叠

addplantoPlanArray samply初始化一个视图并将其添加到PlanArray,然后使用“for in”循环将该数组中的每个视图添加到stackview中

代码如下:

    self.addPlantoPlanArray(IDText: "123123", Name: "abc", Participants: "abc", Duration: "abc", Price: "abc")
    self.addPlantoPlanArray(IDText: "14123123", Name: "123123", Participants: "123123", Duration: "123123", Price: "123123")
    for plan in PlanArray {
        stackview.addArrangedSubview(plan)
    }
    stackview.axis = .horizontal
    stackview.distribution = .fillEqually
    stackview.spacing = 274
    view.addSubview(stackview)
结果是第二个视图与第一个视图完全重叠

stackview的约束条件包括:

    view.addSubview(PlanStackView)
    PlanStackView.translatesAutoresizingMaskIntoConstraints = false
    let stackviewTop = NSLayoutConstraint(item: PlanStackView, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1, constant: 380)
    let stackviewLeading = NSLayoutConstraint(item: PlanStackView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 10)
    view.addConstraints([stackviewTop, stackviewLeading])
实例视图没有约束,它是带有默认帧的init。下面是实例类的init方法:

    init(PlanDefaultIDText: String, PlanNameText: String, PlanParticipantsText: String, PlanDurationText: String, PlanPriceText: String) {
    super.init(frame: CGRect(x: 0, y: 0, width: 264, height: 150))

需要帮助。。。这让我烦了两个小时。单独将视图添加到stackview中是可以的,但是当使用For in循环时,它很糟糕。我不确定为什么需要
274
点作为间距。对我来说这就是代码的味道。你在用什么设备?你能给我们看看stackview本身的结构吗。您是否将stackView的
翻译自动调整大小GMaskintoConstraints
设置为
false
?如果这不起作用,那么我们还需要查看
计划
实例的约束。我更新了stackview的约束,谢谢。274有助于使其看起来很好,但在添加第三个视图时没有帮助。1。stackView的尾部和底部约束在哪里?!2.如果您的
init
方法只采用一个封装了其所有字符串的模型,那么您就不必像这样传递给它了,即do
Struct Plan{var defaultIDText:String;nameText:String,ParticipantsText:String;duration:String;prince:String}
然后用
init(plan:plan){self.plan=plan;super.init(frame:CGRect(x:0,y:0,width:264,height:150))实例化视图。