func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
let cellHeight = self.promotionListViewList[indexPath.row].tableViewHeight.value
if cellHeight < 0 {
return 1.0
} else {
return cellHeight
}
}
当我取消注释此方法并在iPhone5或iPad2上运行我的项目时,我遇到了这个例外:
&#39;表格视图行高不得为负数 - 为索引路径提供高度&#39;
并且应用程序崩溃。
但为什么?
我没有在这种方法中产生负值。
如果我评论它没有任何反应。
答案 0 :(得分:4)
如果您根据此stackoverflow回答 https://stackoverflow.com/questions/18397206/autolayout-error-with-uitableview使用autolayout:
- 估计行高为1.0会导致异常:“NSInternalInconsistencyException”,原因:'表视图行高不得为负...'“
估计小于1.0也有奇怪的结果。
估计2.0和实际工作之间没有任何例外(尽管2.0可能是出于优化原因的不好选择 - 你希望尽可能接近实际)。
- 醇>
约束异常仅在估计行高度大于实际行高时发生。越接近实际,异常发生的可能性就越小。在获得异常之前,您的估计距离似乎与几个不同的因素有关:实际行高,行的位置等。
此解决方案应避免例外:
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
let cellHeight = self.promotionListViewList[indexPath.row].tableViewHeight.value
if cellHeight < 0 {
return 1.01
} else {
return cellHeight
}
}
答案 1 :(得分:0)
请改为尝试:
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
let cellHeight = self.promotionListViewList[indexPath.row].tableViewHeight.value
return max(cellHeight, 1.0)
}