向 uitableview 添加分隔符会导致布局约束错误
Posted
技术标签:
【中文标题】向 uitableview 添加分隔符会导致布局约束错误【英文标题】:Adding a seperator to the tableview causes a layoutconstraint error 【发布时间】:2019-09-24 11:55:20 【问题描述】:我遇到了在 UITableViewController 中显示简单单元格的问题。 我的单元格只包含一个 UIImage。图像的顶部、前导和底部空间为 20。图像的高度和宽度为 60。
我不断收到以下 NSLayoutConstraint 问题。
"<NSLayoutConstraint:0x600001d6e030 UIImageView:0x7f8a37c218c0.height == 60 (active)>",
"<NSLayoutConstraint:0x600001d6d9a0 V:|-(20)-[UIImageView:0x7f8a37c218c0] (active, names: '|':UITableViewCellContentView:0x7f8a37c1bb70 )>",
"<NSLayoutConstraint:0x600001d6c280 V:[UIImageView:0x7f8a37c218c0]-(20)-| (active, names: '|':UITableViewCellContentView:0x7f8a37c1bb70 )>",
"<NSLayoutConstraint:0x600001d6f430 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7f8a37c1bb70.height == 100.333 (active)>"
我自己没有添加最后一个。它可能会自动生成整个视图的高度。
过了一会我发现删除tableview的分隔符确保没有冲突了
self.tableView.separatorStyle = .singleLine
我不想使用自定义 UIView 作为分隔符,我该如何解决这个问题。该应用程序正在打破图像的高度限制,这实际上并不是什么大问题。因为图像现在将是 60.333,但我想知道出了什么问题。
我已经尝试添加 automaticDimention 和estimatedRowHeight 没有成功
将 separatorStyle 设置为 none,将修复错误。但是应该有一个更聪明的解决方案。
【问题讨论】:
您可以使用 heightForRowAt 方法为单元格添加高度吗?? 将您的高度限制设置为 999 的优先级 设置优先级确实可以消除错误,我想我现在将使用该解决方案。谢谢 【参考方案1】:图像的顶部、前导和底部空间为 20。图像的高度和宽度为 20。
这就是问题所在。无需在高度旁边设置顶部和底部
这可以通过使用来解决
保持高度宽度固定
去掉顶部和底部
使 ImageView 的 CenterY 和 Cell 的 CenterY 相等
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 60 // top 20 + imageView 20 + bottom 20
或者
保留顶部和底部约束并移除高度,仅保留宽度
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 60 // top 20 + imageView 20 + bottom 20
【讨论】:
我认为它也必须在不设置 heightForRow 方法的情况下工作。我的问题是,当没有分隔符时,如果没有这种方法,它就可以完美地工作。但是添加分隔符,我收到一个错误。以上是关于向 uitableview 添加分隔符会导致布局约束错误的主要内容,如果未能解决你的问题,请参考以下文章
将 UITableView 约束到其父视图的边缘会导致布局冲突
向静态 UITableView 添加行:获取 NSRangeException
向 UITableViewCells 添加子视图会导致滚动时出现问题