每当我重新加载tableView时,都会在heightForRowAt之后调用cellForRowAt。它遵循的顺序是:

 numberofsections -> numberOfRowsInSection -> cellForRowAt -> heightForRow


我已经覆盖了numberOfSections, numberOfRowsInSection, viewForHeaderInSection方法。这些对heightForRowcellForRowAt的调用顺序有影响吗?

我正在使用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)
     }
}



希望对您有所帮助!

10-07 12:01