我有一个静态的UITableView
,我想动态设置三个单元格的行高。因此,在viewDidLoad()
中,我实现了以下代码:
tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableView.automaticDimension
我还实现了heightForRowAt
方法:
(第一部分的前两个单元格应具有固定的高度)
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section == 0 && indexPath.row == 0 {
return CGFloat(85)
} else if indexPath.section == 0 && indexPath.row == 1 {
return CGFloat(145)
}
return UITableView.automaticDimension
}
这是我目前得到的结果:
我也将标签的行更改为0,并且单元格内标签的约束为0、12、0、12(顶部,右侧,底部,左侧)。
有人知道,为什么第3节中的单元格没有以正确的方式显示数据?
编辑: (执行上述建议后的外观如何
答案 0 :(得分:0)
第3部分中的单元格正以正确的方式显示数据。除非另行说明,否则UILabel
不会自动调整以适应其中的文本。
我需要做的是选择有问题的UILabel
,然后在属性检查器中将Number of Lines
设置为0
。
您还说过,此UILabel
是动态的,这意味着您将其文本设置为代码中的某个位置。设置此UILabel
的文本后,您将立即要呼叫myLabel.sizeToFit()
。这应该调整标签的高度以容纳其中的文本。
如果这行不通,我还有另一个更复杂的解决方案应该对您有用。
答案 1 :(得分:0)
由于sizeToFit()
对您不起作用,因此我们将尝试一些更复杂的事情。
第3部分中的单元格正以正确的方式显示数据。这是因为UILabel
不会自动调整其高度以容纳其中的文本。这是您需要做的:
1。为UILabel创建高度约束。在界面构建器中,为第3部分的单元格中UILabel
的高度添加约束。通过@IBOutlet
将此高度约束连接到视图控制器的类:
class YourViewController: UIViewController {
@IBOutlet var cellLabel: UILabel!
@IBOutlet var cellLabelHeight: NSLayoutConstraint!
...
}
2。添加用于计算高度的字符串扩展名。我不确定在何处/何时设置有问题的UILabel
的文本,但是我知道您正在某处进行此操作,因为您将其描述为“动态的” 。每当您确实设置有问题的UILabel
的文本时,现在还需要更改为适应该文本而设置的高度约束的常数。因此,我们需要能够根据UILabel
的宽度和字体来计算其高度。我们可以在extension
上添加String
来完成此操作:
extension String {
func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [.font: font], context: nil)
return ceil(boundingBox.height)
}
}
3。根据UILabel的文本设置高度约束的常量。最后一步是设置UILabel
高度约束的高度,方法是使用我们刚创建的扩展名:
cellLabel.text = "DummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyData"
//This will be called immediately after you set the text for the UILabel in question
cellLabelHeight.constant = cellLabel.text.height(withConstrainedWidth: cellLabel.frame.width, font: cellLabel.font)
答案 2 :(得分:0)
请看下面;
苹果也说Self-Sizing
摘要: 在单元格的内容视图中布置表格视图单元格的内容。要定义单元格的高度,您需要不间断的约束和视图链(具有定义的高度),以填充内容视图的顶部边缘与其底部边缘之间的区域。如果您的视图具有固有的内容高度,则系统将使用这些值。如果不是,则必须将适当的高度限制添加到视图或内容视图本身。 将AuthorLabel的底部约束从等于或大于或等于