gpt4 book ai didi

uiview - 布局 subview 无法正常工作

转载 作者:行者123 更新时间:2023-11-28 05:34:45 26 4
gpt4 key购买 nike

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

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

这是我正在使用的构造函数。根据调试器, View 在 super View 中,但它们不可见

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

}

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

关于uiview - 布局 subview 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24454837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com