我在设置文本时调用了哪个UILabel方法,并调整自身以适应?

时间:2015-06-03 09:03:27

标签: ios storyboard uilabel nslayoutconstraint

我有一个UILabel,在Universal storyboard中创建,我已经提到了所有约束的位置除了宽度。因此它根据文本集调整自身大小。太棒了!正是我想要的。

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

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

目前的样子:

enter image description here

2 个答案:

答案 0 :(得分:4)

很遗憾,我们不能在contentEdgeInsets上设置任何UILabel属性(就像我们在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);
}

请注意,这只会触及水平填充,但显然可以修改以添加垂直填充。

答案 1 :(得分:1)

如果您想以编程方式执行此操作,那么Steffen的答案是可行的。我的项目中通常有一个通用的自定义标签子类,除了其他功能之外还添加了一个(IBInspectablecontentInsets属性。

无论如何,只是想指出你也可以通过将标签包装在另一个视图中来完全在IB中完成此操作,为容器视图提供背景颜色并为水平填充添加约束。