自定义 UIView intrinsicContentSize 宽度得到可笑的大值或零

Custom UIView intrinsicContentSize width gets ridiculously large values or zero

我正在尝试为 Xcode 9.1 中的 UILabel 创建偏移编辑背景。

我有一个包含 UILabel 的 UIView 的 @IBDesignable 子类。我有下一个约束:

  1. label.centerX == self.centerX
  2. label.centerY == self.centerY
  3. 宽度:self == 1 x label + offset; (通常偏移 - 20)
  4. 高度: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 它可以正常工作一段时间。