gpt4 book ai didi

ios - 如何使自动布局与 XIB 中的自定义 UIView 一起工作?

转载 作者:行者123 更新时间:2023-11-28 23:39:45 24 4
gpt4 key购买 nike

我在 XIB 上有一个 UIView,其中包含一个 UIImageView 和一个 UILabel,中间有一个小空间。水平布局是一个简单的链式 |--image--label--| 其中 -- 是一些固定的空间。高度固定为 40,此 View 在其 View Controller 中水平居中,并且具有 >= 100 宽度约束。

如果我更改标签文本,我的组合 View 的宽度会按预期宽度更新其标签的更改宽度,并且它会很好地位于 View Controller 的中心。

因为我需要这个包含图像和标签的 UIView,所以我在其他地方创建了一个由 XIB 和 Swift 文件组成的自定义类。我们称它为 ItemView

我的问题是我的 View Controller XIB 上的空 UIView,我已将其类更改为 ItemView,不再接受 >= 40 宽度限制。这当然是因为 View Controller XIB 不再看到可变宽度的 UILabel,而只是 ItemView 类的普通 UIView。我收到“不等式约束歧义”IB 错误。

结果是我的自定义 View 的宽度仍然是 40。如果我指定更大的 >= 标签宽度,它会起作用一点;文本只有在达到此宽度时才会被截断。但在第二种情况下,我的自定义 View 不再水平居中,而是向左移动了一点。

如何解决这个问题?或者,我如何告诉 IB 以与 UILabel 类似的方式处理我的自定义 ItemView

在我的 ItemView 中,我已经完成了我能找到的所有内容:

override class var requiresConstraintBasedLayout: Bool
{
return true
}

设置标签文本后调用setNeedsLayout()

调用 myLabel.translatesAutoresizingMaskIntoConstraints = false

调用 self.translatesAutoresizingMaskIntoConstraints = false

并在两个 init() 中调用 self.setNeedsUpdateConstraints()

最佳答案

在 View 的大小检查器中配置此弹出窗口:

enter image description here

现在 IB 不会担心您的尺寸规范。您比 IB 更了解,这就是告诉 IB 这个事实的方式。


另一种方法:在 View 的大小检查器中配置这个弹出窗口:

enter image description here

这告诉 IB View 将具有它不知道的固有内容大小。


这些都行。正如您在此屏幕截图中所见,我已为我的自定义 View 设置了大于或等于 40 的宽度约束,但 IB 并未提示任何错误:

enter image description here

关于ios - 如何使自动布局与 XIB 中的自定义 UIView 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53859330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com