我有一个UITableView
,需要通过列出风格类似在一个UITableView对齐多个运行时产生的UILabels
但棘手的部分,以支持内容是“标签”的量将随着每一个变化细胞,一些可具有仅4,但也达12同样,“值”可以是单个单词或短语短至多两行(如上面在图像中)。所以我决定用UIStackView
帮我收拾行李,并用于显示此大小我UILabels
。我目前停留在一个问题,当“标签”中,例如,长度变化:
我需要的“价值”的前端像第一图像对准即使“标签”长短不一。是否有这样的行为UIStackView
?还是有另一种方法可以让我获得我需要的结果?
注:每一个“标签”和“价值”是一个UIStackView
,我这样做是为了将它们对齐。
我尝试使用字符串格式化过,但“价值”与一个以上的生产线将在标签,而不是包装在包装本身就像我管理的图像做。
我试着把所有的“标签”放在一个UIStackView
和所有的“值”在另一个,我不能让他们像在图像中一样,“价值”超过一行对齐。
或者,如果它可能是一个错误,我什么地方做,这是我创建的UIStackViews
:
var higherCount = 0
if labels.count<values.count {
higherCount = values.count
} else {
higherCount = labels.count
}
mainStackView = UIStackView(frame: CGRect(x: 0, y: 0, width: frame.width, height: frame.height))
for i in 0..<higherCount {
var height:CGFloat = 20
if (values[i] as NSString).size(attributes: [NSFontAttributeName:UIFont.systemFont(ofSize: UIFont.systemFontSize)]).width > frame.width {
height = 42
}
let stackViewToAdd = UIStackView(frame: CGRect(x: 0, y: 0, width: frame.width, height: height))
let label = UILabel(frame: CGRect(x: 0, y: 0, width: frame.width, height: height))
if labels.count<higherCount {
label.text = ""
} else {
label.text = labels[i]
}
label.setContentCompressionResistancePriority(1000, for: .horizontal)
label.setContentHuggingPriority(999, for: .horizontal)
stackViewToAdd.addArrangedSubview(label)
let value = UILabel(frame: CGRect(x: 0, y: 0, width: frame.width, height: height))
if values.count<higherCount {
value.text = ""
} else {
value.text = values[i]
}
value.lineBreakMode = .byWordWrapping
value.numberOfLines = 2
stackViewToAdd.addArrangedSubview(value)
mainStackView?.addArrangedSubview(stackViewToAdd)
}
mainStackView?.alignment = .fill
mainStackView?.axis = .vertical
mainStackView?.distribution = .fill
用户可以自上浆的tableview细胞 –
@VinupriyaArivazhagan你能解释一下吗?我尝试过使用它,但因为我的整个单元格是以编程方式创建的,所以单元格根本不会调整大小。 –