自定义 UITableViewCell 的自动布局约束在运行时失败
Posted
技术标签:
【中文标题】自定义 UITableViewCell 的自动布局约束在运行时失败【英文标题】:Autolayout constraints on custom UITableViewCell failing at runtime 【发布时间】:2018-02-05 06:06:03 【问题描述】:我的应用使用表格视图控制器来显示自定义原型表格视图单元格,其中包含嵌入在堆栈视图中的图像视图和标签。不幸的是,在运行时,主 imageView(左侧)似乎放弃了它的约束并以意想不到的方式显示图像。
虽然我已经在先前视图控制器(顶部)的视图中成功实现了嵌入在堆栈视图中的组件的基本相同配置,但相同的配置似乎在自定义表格视图单元格(底部)中不起作用。
这是它在 XCode 中的显示方式:
这是它在模拟器中的显示方式:
在第一次诊断问题时,我的调试器建议我通过添加 UIViewAlertForUnsatisfiableConstraint 来设置符号断点,因为它“试图通过打破约束来恢复”,如下所述:How to trap on UIViewAlertForUnsatisfiableConstraints?
在尝试修复该问题几次后,该错误消失了,取而代之的是一个看似 Apple 的错误:
有没有办法解决后一个错误,或者我是否正在做一些事情来触发它,我可以修复它?
仅供参考:我主要使用 IB 来布置约束,因为视图有些密集。
【问题讨论】:
尝试缩放以适应图像视图中的内容类型 @D.Desai 是的...这是默认设置。不幸的是,当我选择它作为内容类型时,它的行为方式相同。还有什么可能? 【参考方案1】:您正在使用UITableViewCell's
默认UIImageView
。
您必须为 ImageView
中的 UITableViewCell
创建 Outlet 连接
您的代码:
class TableViewCell: UITableViewCell
@IBOutlet weak var thumbImgVw: UIImageView!
if let url = URL(string: location.imageUrl)
if let imageData = try? Data(contentsOf: url)
let image = UIImage(data: imageData)
cell.thumbImgVw?.layer.cornerRadius = 10
cell.thumbImgVw?.clipsToBounds = true
cell.thumbImgVw?.image = image
【讨论】:
我试过这个,除了删除我的标签。我实际上限制了 imageView 的高度和宽度,而不是像你建议的那样限制在左、右、上、下等。然而,这两种方法产生相同的结果。 删除你的堆栈视图并单独添加 UIImageView。然后给出以下约束。尝试运行。你会得到好的结果。然后,U 可以添加 UIStackView。 这似乎不起作用。是的,stackview 似乎没有必要,但在之前的视图控制器中,创建适当的边距并管理它相对于右侧包含标签的 stackview 和另一个嵌入了 uiimageviews 的 stackview 的行为要容易得多。 你能告诉我,你给 UIStackView [thumbnail] 和 Spacing 和 UIImageView [Thumbnail] 的约束条件是什么? 水平 StackView [topMost],上,左,下,右 .. ??我说的对吗??以上是关于自定义 UITableViewCell 的自动布局约束在运行时失败的主要内容,如果未能解决你的问题,请参考以下文章
使用堆栈视图和自动布局创建自定义 UITableViewCell
自定义 UITableViewCell 中标签的自动布局优先级