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

时间:2017-11-15 16:21:45

标签: ios uiview uilabel interface-builder intrinsic-content-size

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

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

  1. label.centerX == self.centerX
  2. label.centerY == self.centerY
  3. width:self == 1 x label + offset; (通常偏移 - 20)
  4. 身高:自我==多x标签+ 0; (通常是 - 1.3)
  5. 我也覆盖了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。

    Large value screenshot

    Interface Builder complaint

    在其他情况下,视图intrinsicContentSize.width为0,并且为我的视图设置intrinsicContentSize的占位符没有帮助。

    如果你转到其他swift文件并返回它可以改变。有时它显示正确的价值,但在大多数情况下都是虚假的。

    最终的布局通常是我的意图,所以它在运行时工作,但我几乎不能在这个视图中使用Interface Builder。

    我还尝试使用空文本或一个像'。'这样的字符文本初始化UILabel。和框架(0,0,1,1),因为我认为可能零帧和零文本提供这种行为,但它似乎也无济于事。

    你有什么想法我可以解决这个问题所以我可以在Interface Builder中使用我的OffsetLabel吗?为什么会这样?

1 个答案:

答案 0 :(得分:0)

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