每当我重新加载tableView时,都会在heightForRowAt
之后调用cellForRowAt
。它遵循的顺序是:
numberofsections -> numberOfRowsInSection -> cellForRowAt -> heightForRow
我已经覆盖了
numberOfSections, numberOfRowsInSection, viewForHeaderInSection
方法。这些对heightForRow
和cellForRowAt
的调用顺序有影响吗?我正在使用Xcode 9.1,在iOS 11上运行的Swift 3。
最佳答案
您在这里有两个选择:
以定义单元格大小的方式来制作它的contentView。这意味着您的布局在垂直方向上不应过于宏大。
手动计算尺寸。汇总(个)子视图之间的偏移量(高度)。这可能是计算标签/ textView大小的问题(留出用于计算文本大小的辅助扩展名)。注意textView.contentInsets!您也需要注意以获取正确的尺寸
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: [NSAttributedStringKey.font: font], context: nil)
return ceil(boundingBox.height)
}
func width(withConstraintedHeight height: CGFloat, font: UIFont) -> CGFloat {
let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height)
let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin,
attributes: [NSAttributedStringKey.font: font], context: nil)
return ceil(boundingBox.width)
}
}
希望对您有所帮助!