【发布时间】:2018-04-28 23:23:21
【问题描述】:
我正在尝试为 Xcode 9.1 中的 UILabel 制作偏移背景。
我有一个 UIView 的 @IBDesignable 子类,其中包含 UILabel。我有下一个限制:
- label.centerX == self.centerX
- label.centerY == self.centerY
- 宽度:self == 1 x 标签 + 偏移量; (通常偏移 - 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 吗?为什么会这样?
【问题讨论】:
标签: ios uiview uilabel interface-builder intrinsic-content-size