自定义 UIView intrinsicContentSize 宽度得到可笑的大值或零
Custom UIView intrinsicContentSize width gets ridiculously large values or zero
我正在尝试为 Xcode 9.1 中的 UILabel 创建偏移编辑背景。
我有一个包含 UILabel 的 UIView 的 @IBDesignable
子类。我有下一个约束:
- label.centerX == self.centerX
- label.centerY == self.centerY
- 宽度:self == 1 x label + offset; (通常偏移 - 20)
- 高度:self == mult x label + 0; (乘数通常 - 1.3)
我也覆盖了intrinsicContentSize
:
override var intrinsicContentSize: CGSize {
get {
var size = self.label.intrinsicContentSize
size.width += offset
size.height *= self.mult
return size
}
}
现在有时,如果我调试代码并在我覆盖的 intrinsicContentSize
中的断点处停止,但主要是在 Interface Builder 中,我会得到一些非常大的宽度值,如 20,000,010
或类似的东西。它们非常随机但非常大。上次 Interface Builder 抱怨你只能制作 10,000x10,000 的 UIView。
在其他情况下,视图 intrinsicContentSize.width 为 0 并且为我的视图设置 intrinsicContentSize 占位符没有帮助。
如果您转到其他 swift 文件并返回,它可能会发生变化。有时它显示正确的值,但在大多数情况下是虚假的。
最终的布局通常是我想要的,所以它可以在运行时工作,但我几乎不能在这个视图中使用 Interface Builder。
我还尝试用空文本或一个字符文本(如“.”)初始化 UILabel和 frame (0,0,1,1),因为我认为可能零帧和 nil 文本提供了这种行为,但似乎也无济于事。
您是否知道如何解决此问题以便我可以在 Interface Builder 中使用我的 OffsetLabel?为什么会这样?
似乎在重新启动后 Xcode 它可以正常工作一段时间。
我正在尝试为 Xcode 9.1 中的 UILabel 创建偏移编辑背景。
我有一个包含 UILabel 的 UIView 的 @IBDesignable
子类。我有下一个约束:
- label.centerX == self.centerX
- label.centerY == self.centerY
- 宽度:self == 1 x label + offset; (通常偏移 - 20)
- 高度:self == mult x label + 0; (乘数通常 - 1.3)
我也覆盖了intrinsicContentSize
:
override var intrinsicContentSize: CGSize {
get {
var size = self.label.intrinsicContentSize
size.width += offset
size.height *= self.mult
return size
}
}
现在有时,如果我调试代码并在我覆盖的 intrinsicContentSize
中的断点处停止,但主要是在 Interface Builder 中,我会得到一些非常大的宽度值,如 20,000,010
或类似的东西。它们非常随机但非常大。上次 Interface Builder 抱怨你只能制作 10,000x10,000 的 UIView。
在其他情况下,视图 intrinsicContentSize.width 为 0 并且为我的视图设置 intrinsicContentSize 占位符没有帮助。
如果您转到其他 swift 文件并返回,它可能会发生变化。有时它显示正确的值,但在大多数情况下是虚假的。
最终的布局通常是我想要的,所以它可以在运行时工作,但我几乎不能在这个视图中使用 Interface Builder。
我还尝试用空文本或一个字符文本(如“.”)初始化 UILabel和 frame (0,0,1,1),因为我认为可能零帧和 nil 文本提供了这种行为,但似乎也无济于事。
您是否知道如何解决此问题以便我可以在 Interface Builder 中使用我的 OffsetLabel?为什么会这样?
似乎在重新启动后 Xcode 它可以正常工作一段时间。