Uiview 布局子视图工作不正常

Uiview 布局子视图工作不正常,uiview,swift,Uiview,Swift,我在设计自定义视图时遇到问题。 它本质上是一个显示12个标签的表,其中左上标签和左下标签的宽度必须为其他视图的5倍。我已经在布局子视图中添加了视图并调整了框架,但是标签没有出现在视图中(已经使用Xcode的新视图调试器进行了检查) override func layoutSubviews() { super.layoutSubviews() let width = self.frame.size.width let height = self.frame.size.h

我在设计自定义视图时遇到问题。 它本质上是一个显示12个标签的表,其中左上标签和左下标签的宽度必须为其他视图的5倍。我已经在布局子视图中添加了视图并调整了框架,但是标签没有出现在视图中(已经使用Xcode的新视图调试器进行了检查)

 override func layoutSubviews() {
    super.layoutSubviews()

    let width = self.frame.size.width
    let height = self.frame.size.height

    let normalWidth = width/10
    let normalHeight = height/2


    var currentOrigin = CGPoint(x: 0, y: 0)

    let nameSize = CGSize(width: normalWidth * 5 - 3, height: normalHeight)

    labels[0][0].frame = CGRect(origin: currentOrigin, size: nameSize)

    currentOrigin.x += normalWidth

    for j in labels[0]{
        j.frame = CGRect(origin: currentOrigin, size: CGSize(width: normalWidth - 3, height: normalHeight))
        currentOrigin.x += normalWidth
    }

    currentOrigin.y = normalHeight
    currentOrigin.x = 0
    labels[1][0].frame = CGRect(origin: currentOrigin, size: nameSize)

    for j in labels[1]{
        j.frame = CGRect(origin: currentOrigin, size: CGSize(width: normalWidth - 3, height: normalHeight))
        currentOrigin.x += normalWidth
    }
}
这是我使用的构造函数。根据调试器,视图在superview中,但不可见

 init(frame: CGRect) {
    labels = Array(count:2, repeatedValue:Array(count:6, repeatedValue: UILabel() ))
    super.init(frame: frame)

    for i in 0..labels.count{
        for j in 0..labels[i].count{
            labels[i][j] = UILabel()
            labels[i][j].font = currentFont
            labels[i][j].adjustsFontSizeToFitWidth = true
            labels[i][j].textAlignment = NSTextAlignment.Center
            labels[i][j].text = "HOLA MUNDO"
            addSubview(labels[i][j])
        }
    }

    for i in 0..labels.count{
        if let k = delegate?{
            labels[i][0].text = k.name(i+1)
        }
    }


    for i in 0..labels.count{
        for j in 1..labels[i].count{
            labels[i][j].text = "0"
        }
    }
}

如果有人有类似的问题,这里是我最终找到的解决办法

 labels = Array(count:2, repeatedValue:Array(count:6, repeatedValue: UILabel() ))
此行生成2个UILabel数组,但数组中的所有项都指向同一UILabel实例。此外:

  labels[0] === labels[1] //They will point to the same instance
另一个错误是反复出现

 for i in 0..labels.count{
    if let k = delegate?{
        labels[i][0].text = k.name(i+1)
    }
}
正确的做法是从1迭代到labels.count,因为第一个标签必须具有不同的大小

实例化数组的正确形式如下所示:

  for i in 0..2{
        labels.append([UILabel]())
        for j in 0..6{
            labels[i].append(UILabel())
            labels[i][j].font = currentFont
            labels[i][j].adjustsFontSizeToFitWidth = true
            labels[i][j].textAlignment = NSTextAlignment.Center
            labels[i][j].text = "HOLA MUNDO"
                addSubview(labels[i][j])

        }
希望它能帮助你避免这个错误。它真的很难找到