1

我正在尝试为 Xcode 9.1 中的 UILabel 制作偏移背景。

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

  1. label.centerX == self.centerX
  2. label.centerY == self.centerY
  3. 宽度:自我 == 1 x 标签 + 偏移量;(通常偏移 - 20)
  4. 高度:自我 == 多 x 标签 + 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 吗?为什么会这样?

4

1 回答 1

0

似乎在重新启动 Xcode 后它会按预期工作一段时间。

于 2018-01-19T16:10:33.473 回答