给Iphone上的UiButton提供文本边距/填充

我有以下的布局,我试图添加一个填充左,右..

该控件是一些残疾的Uibutton。 在这里输入图像说明

我创build一个button的代码是这样的:

UIButton *buttonTime = [[UIButton alloc] initWithFrame:CGRectMake(90, 10, 50, 20)]; [buttonTime setBackgroundImage:[[UIImage imageNamed:@"bubble.png"] stretchableImageWithLeftCapWidth:9 topCapHeight:13] forState:UIControlStateDisabled]; [buttonTime setTitle:@"27 feb, 2011 11:10 PM" forState:UIControlStateDisabled]; [buttonTime setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled]; buttonTime.titleLabel.font=[UIFont fontWithName:@"Helvetica" size:8.0]; buttonTime.titleLabel.lineBreakMode= UILineBreakModeWordWrap; [buttonTime setEnabled:FALSE]; [scrollView addSubview:buttonTime]; [buttonTime release]; 
 @property(nonatomic) UIEdgeInsets titleEdgeInsets; 

使用此属性来调整和重新定位button标题的有效绘图矩形。 您可以为四个插图(顶部,左侧,底部,右侧)中的每一个指定不同的值。 一个正值缩小,或插入,边缘移动它靠近button的中心。 负值会扩大或突破该边缘。 使用UIEdgeInsetsMake函数为此属性构造一个值。 默认值是UIEdgeInsetsZero。

托罗的答案是完美的。 您还可以在Storyboard或xib中的Size Inspector中设置插入值。

在这里输入图像说明

接受答案的挑战是设置titleEdgeInsets是苹果公司文档中提到的限制:

此属性仅用于在布局过程中定位标题。 >button不使用此属性来确定intrinsicContentSize和> sizeThatFits(_ :)。

这意味着只有button的尺寸明确适合标题标签和边距时,才能设置边距。 如果标题太长或边距太大,标题文本可能会被裁剪。 这对于在编译时知道其标题的button是可以的,但对于可变长度的button标题,可能会造成问题。

适应可变标题长度的另一种方法是将titleEdgeInsets作为默认值。 一旦button的标题被​​设置,添加明确的宽度和高度约束,以适应button的标题标签和额外的边距。 例如:

 let margin: CGFloat = 10.0 let button = UIButton() button.setTitle("My Button Title", for .normal) button.widthAnchor.constraint(equalToConstant: button.titleLabel!.intrinsicContentSize.width + margin * 2.0).isActive = true button.heightAnchor.constraint(equalToConstant: button.titleLabel!.intrinsicContentSize.height + margin * 2.0).isActive = true 

定位button而不添加更多的高度或宽度限制,无论标题长度如何,它都会正确显示。

这个链接像contentHorizontalAlignment属性的魅力

就像在评论中提到的@bugloaf一样,设置内容插入将防止UIButton的标题缩小/截断

在这里输入图像说明

这个选项也是可行的,如果它不太烦人的使用UIButton子类

 class Button: UIButton { override var intrinsicContentSize: CGSize { get { let baseSize = super.intrinsicContentSize return CGSize(width: baseSize.width + titleEdgeInsets.left + titleEdgeInsets.right, height: baseSize.height + titleEdgeInsets.top + titleEdgeInsets.bottom) } } } 

然后根据需要使用titleEdgeInsets

  let button = Button() ... configure button button.titleEdgeInsets = ... 

我发现了一个简单的方法来为文本button添加边框(并有左/右边距):

  1. 创build带标题的button。

  2. 放置button在故事板,alignment你想要的地方,然后添加一个强制的宽度约束是一个偶数(我用20,所以它在每边增加10点)。 这将强制您创build的宽度的边界。

  3. 使用代码来创build一个边框。 例如:

     myTextButton.backgroundColor = .clear myTextButton.layer.cornerRadius = 5 myTextButton.layer.borderWidth = 2 myTextButton.layer.borderColor = UIColor.white.cgColor 
  4. 通过编辑器(现在在Size Inspector下)或通过代码将左侧titleInset设置为2。 这看起来是以文本为中心,但是对于各种文本和文本大小,这个值可能是不同的。

这篇文章是针对XCode 8.1和Swift 3的。