当我设置文本时调用哪个 UILabel 方法,它会自行调整大小以适应?

Which UILabel method is invoked when I set text, and it resizes itself to fit?

我有一个在通用故事板中创建的 UILabel,我已经提到了其位置 OTHER THAN WIDTH 的所有必需的 constraints。所以它根据文本集调整自己的大小。极好的!正是我想要的。

问题从这里开始: 它的背景颜色为绿色,但这种颜色紧紧包裹着我的文字。因此,我相信将它扩大一点可以帮助我。但为此,我需要知道调用了我的 UILabel 子类的哪个方法。这样我就可以覆盖并添加 10 点的额外宽度。

BottomLine:在我为标签分配文本后,调用哪个 UILabel 方法自动调整标签大小?

目前的样子:

不幸的是,我们没有任何可以在 UILabel 上设置的 contentEdgeInsets 属性(正如我们在 UIButton 上设置的)。如果您希望自动布局继续自己进行高度和宽度约束,您可以创建 UILabel 的子类并覆盖 intrinsicContentSizesizeThatFits 以实现您想要的。

所以,类似于:

- (CGSize) intrinsicContentSize
{
    return [self addHorizontalPadding:[super intrinsicContentSize]];
}

- (CGSize)sizeThatFits:(CGSize)size
{
    return [self addHorizontalPadding:[super intrinsicContentSize]];
}

- (CGSize)addHorizontalPadding:(CGSize)size
{
    return CGSizeMake(size.width + (2*kSomeHorizontalPaddingValue), size.height);
}

请注意,这仅涉及水平填充,但显然也可以修改以添加垂直填充。

如果您想以编程方式执行此操作,Steffen 的回答是可行的方法。我的项目中通常有一个通用的自定义标签子类,其中添加了 (IBInspectable) contentInsets 属性,等等。

无论如何,只是想指出,您也可以在 IB 中完全做到这一点,只需将您的标签包装在另一个视图中,为容器视图提供背景颜色并为您的水平填充添加约束。