我如何添加填充到UILabel的固有内容大小?

我在iOS7上使用autolayout,我有这样的问题:

我将一个UILabel放到UIView上,我正在安排自动布局约束,以便标签的centerX =父视图的centerX。 我没有给任何宽度的限制标签。 当我在运行时设置标签的文本时,标签的宽度足以让文本适合,左侧和右侧没有边距/填充。 我想要的是在左侧和右侧有一些填充,以便文本不会从标签开始的位置开始。 黑客实现这可能是设置文本为“文本”,但当然这不是要走的路:)

我怎样才能达到我想要的?

您可以扩展UILabel并自行覆盖intrinsicContentSize。 请确保你已经设置了textAlignment = NSTextAlignmentCenter。

-(CGSize)intrinsicContentSize{ CGSize contentSize = [super intrinsicContentSize]; return CGSizeMake(contentSize.width + 50, contentSize.height); } 

这可能只适用于只显示一行文字的情况。

您可以创build一个UILabel子类并重写intrinsicContent,

 -(CGSize)intrinsicContentSize { CGSize s = [super intrinsicContentSize]; s = CGSizeMake(s.width + 20, s.height); return s; } 

这将为宽度添加20点的填充。 如果您想在中间使用文字,请务必将文字alignment设置为中间。

如果使用自动布局,则可以设置水平约束,并在metrics参数中使用NSDictionary来dynamic设置它。

例如,如果你想给一个UIButton内容填充10pt,你可以做如下的事情:

 NSDictionary *padding = @{ @"padding" : @(button.intrinsicContentSize.width + 20) }; NSArray *buttonHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button(==padding)]|" options:0 metrics:padding views:NSDictionaryOfVariableBindings(button)]; 

如果你试图给UILabel一个不同的颜色到它的父视图,那么你将需要用你想要的填充和背景颜色将UILabel放在一个UIView中。 如果您的UILabels背景颜色与其父视图相同,那么我不明白这个问题,只是使用自动布局来指定相对于它旁边的东西需要多less空间。