我有一个带有元素的tableViewCell(c - 表示约束):
TableView设置了estimatedH = 30和rowH = Automatic
压缩/拥抱优先级未被更改 - 默认,bcs所有元素具有相同的优先级
在cellForRow中的我设置了Label1和Label2文本(相应的2行和3行)。我也为完成后的imageView调用SDWebImage方法sd_setImage。完成后我按照公式
设置imageView高度newHeight =(cell.newsImageView.bounds.width / image.size.width)* image.size.height
但结果是,我的标签显示最多2行文字,而imageView的高度不正确。在tableView重新加载(pull-to-refresh)或新的dequed单元格之后都可以,但是对于可见 - 不好。
我已经尝试使用SDWebImagePrefetcher预取图像并在完成时重新加载表格,但这不会帮助
如何解决此问题?
更新05.04.17
这是关于约束冲突的日志堆栈。也许它可以帮助分析问题。
(
"<NSLayoutConstraint:0x797a1ec0 V:[UILabel:0x7b06b990'22.03.2017 '(16)]>",
"<NSLayoutConstraint:0x797c7250 V:[UIImageView:0x797e6560(214.2)]>",
"<NSLayoutConstraint:0x797ca430 V:[UILabel:0x797c7900'\U0427\U0418\U0422\U0410\U0422\U0418 \U041d\U041e\U0412\U0418\U041d\U0423'(20)]>",
"<NSLayoutConstraint:0x797d7ac0 V:|-(16)-[UILabel:0x7b06b990'22.03.2017 '] (Names: '|':UIView:0x7b0810d0 )>",
"<NSLayoutConstraint:0x797d2ac0 V:[UILabel:0x7b06b990'22.03.2017 ']-(0)-[UILabel:0x797c40a0'\U0406\U043d\U0444\U043e\U0440\U043c\U0430\U0446\U0456\U044f \U0434\U043b\U044f \U0430\U0431\U043e\U043d\U0435\U043d\U0442\U0456\U0432 ...']>",
"<NSLayoutConstraint:0x797d2b80 V:[UILabel:0x797c40a0'\U0406\U043d\U0444\U043e\U0440\U043c\U0430\U0446\U0456\U044f \U0434\U043b\U044f \U0430\U0431\U043e\U043d\U0435\U043d\U0442\U0456\U0432 ...']-(0)-[UILabel:0x797c9090'\U0417 1 \U043a\U0432\U0456\U0442\U043d\U044f 2017 \U0440\U043e\U043a\U0443 \U043f\U0440\U043e\U0432...']>",
"<NSLayoutConstraint:0x797d7c70 V:[UILabel:0x797c9090'\U0417 1 \U043a\U0432\U0456\U0442\U043d\U044f 2017 \U0440\U043e\U043a\U0443 \U043f\U0440\U043e\U0432...']-(10)-[UIImageView:0x797e6560]>",
"<NSLayoutConstraint:0x797d7d00 V:[UIImageView:0x797e6560]-(10)-[UILabel:0x797c7900'\U0427\U0418\U0422\U0410\U0422\U0418 \U041d\U041e\U0412\U0418\U041d\U0423']>",
"<NSLayoutConstraint:0x797d7d30 V:[UILabel:0x797c7900'\U0427\U0418\U0422\U0410\U0422\U0418 \U041d\U041e\U0412\U0418\U041d\U0423']-(10)-| (Names: '|':UIView:0x7b0810d0 )>",
"<NSLayoutConstraint:0x797d8160 V:[UIView:0x7b0810d0]-(5)-| (Names: '|':UITableViewCellContentView:0x7b151eb0 )>",
"<NSLayoutConstraint:0x797d8190 V:|-(5)-[UIView:0x7b0810d0] (Names: '|':UITableViewCellContentView:0x7b151eb0 )>",
"<NSLayoutConstraint:0x797dacb0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7b151eb0(274)]>"
)
答案 0 :(得分:0)
您正在设置estimatedH = 30,但实际上有更多内容
20 + 16 + 100 = 136这远远超过您的估计
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 150
如果要在下载数据后更新特定单元格,则可以调用更新表视图
self.tableview.beginUpdates()
tableview.reloadRows(at: [indexPath], with:.bottom)
self.tableview.endUpdates()
reloadRows有一个枚举选项,您可以使用点符号访问这些选项。我选择.bottom但您可以从符合您需要的枚举中选择