必须将 autoresizing 掩码转换为约束以具有 _setHostsLayoutEngine:YES Xcode 13

Must translate autoresizing mask into constraints to have _setHostsLayoutEngine:YES Xcode 13

我已将我的项目更新为 Xcode 13 和 iOS 15。现在应用程序崩溃并出现与 UITableViewCells 中自动调整掩码大小相关的错误。我试图将检查器中的 UITableViewCells 层 属性 更改为推断并遵循 this post,但其中 none 正在工作。

你遇到过这个问题吗。如何解决?

以下是有关错误的一些信息:

Interface Builder Config Image

override func awakeFromNib() {
    super.awakeFromNib()
    selectionStyle = .none
    setupEventAction()
    configureAccessibilityForCellItem()
}

override func prepareForReuse() {
    super.prepareForReuse()
    eventView.eventImageView.image = nil
}

func configureAnnouncement(announcement: AnnouncementsRowItem, isWhiteCell: Bool = false) {
    eventView.isHidden = announcement.event == nil
    eventView.backgroundView.backgroundColor = isWhiteCell ? R.color.basic1_bg() : R.color.basic2_bg()
    if announcement.event?.eventID.isEmpty ?? false || !isWhiteCell {
        self.backgroundColor = R.color.basic2_bg()
    }
    bubbleView.configureAnnouncementsBubbleView(announcement: announcement)
    eventView.configureAnnouncementsEventView(announcement: announcement)
    layoutIfNeeded()
}

private func setupEventAction() {
    eventView.isUserInteractionEnabled = true
    let gesture = UITapGestureRecognizer(target: self, action: #selector(showEvent))
    gesture.numberOfTapsRequired = 1
    eventView.addGestureRecognizer(gesture)
}

@objc
func showEvent() {
    openEventClicked?()
}

谢谢

我也遇到过同样的问题。 尝试以下: 打开 UITableViewCell 的 *.xib 作为源代码(上下文菜单/“打开为”/“源代码”)。 找到“tableViewCell”和“tableViewCellContentView”标签,删除其“translatesAutoresizingMaskIntoConstraints”属性(带值),删除其子标签“autoresizingMask”(如果存在)。

https://i.stack.imgur.com/bDSJ3.png

删除“tableViewCell”的“translatesAutoresizingMaskIntoConstraints”对我有用,但“autoresizingMask”留在那里,因为它们是由 XCode 再次自动添加的。

同样的事情发生在我身上 xCode 13.0 only iOS 15(之前的 iOS 版本没有任何问题)。

要解决此问题,请确保您的单元格内容视图在尺寸检查器下设置为 Layout: Autoresizing Mask(而不是 Inferred(Constrains)),如下所示图片: Autoresizing Mask

我认为这与 Xcode 13 有关,而且特别针对 xib 文件中的单元格。对我来说,它第一次在 Xcode 13.2.1 上崩溃。以前我用过几个版本的 Xcode 12,它从来没有崩溃过。

我在 xib 中的单元格 Content View 已经设置为 Autoresizing Mask,但单元格本身的布局设置为 Inferred(Constraints)。所以我将其更改为 Autoresizing Mask 并停止崩溃。

  1. Content View 布局设置为 Autoresizing Mask

  2. Cell 布局设置为 Autoresizing Mask

  1. 将 TableViewCell 和 ContentView 的布局更改为“Autoresizing Mask”。如果它仍然被选中,请尝试更改为“推断约束”并返回到“自动调整掩码”。

  2. 尝试在最新的Xcode中打开xib文件,再次保存Xcode和运行所做的更改。

  3. 重要 - 检查 tableView 单元格名称和单元格内子视图的名称是否不同。由于子视图具有相同的名称但布局设置不同,应用程序将崩溃。 (旧 Xcode 版本在这种情况下工作正常)。

问题可在 Xcode 13.1/13.2 和 iOS 15.*

上重现

我的问题已通过其他解决方案解决,但错误相同,原因不同。我的单元格内的视图被分配了与单元格相同的 class,通过删除 class 错误得到解决。

如果您在 UITableViewCell 中插入 UITableViewCell,也会发生这种情况。我正在加载一个我没有意识到的自定义视图 UITableViewCell - 出于某种原因,我认为它只是一个常规的 UIView.