【问题标题】:Which UILabel method is invoked when I set text, and it resizes itself to fit?当我设置文本时调用哪个 UILabel 方法,它会调整自身大小以适应?
【发布时间】:2015-06-03 09:03:27
【问题描述】:

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

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

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

目前的样子:

【问题讨论】:

  • 你能发个截图,这样我就明白你说的“颜色紧紧地包裹着我的文字”是什么意思
  • 检查编辑,添加图片
  • 假设您正在使用自动布局,您还可以覆盖-intrinsicContentSize并返回更大的CGSize(基于super的)

标签: ios storyboard uilabel nslayoutconstraint


【解决方案1】:

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

所以,类似:

- (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);
}

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

【讨论】:

  • 抱歉错别字 - 它现在应该可以工作了。如果您遇到任何问题,请告诉我。
【解决方案2】:

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

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

【讨论】:

  • 如果您更喜欢使用 IB,这绝对是一个好方法。感谢您指出这一点。
猜你喜欢
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2014-02-05
  • 2010-09-19
相关资源
最近更新 更多