自定义 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

方向更改时自定义UITableViewCell自动布局问题

自定义 UITableViewCell 中标签的自动布局优先级

如何使用 xib 文件自动布局宽度自定义 UITableViewCell

具有自动布局的自定义 UITableViewCell 会导致警告