给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添加边框(并有左/右边距):
-
创build带标题的button。
-
放置button在故事板,alignment你想要的地方,然后添加一个强制的宽度约束是一个偶数(我用20,所以它在每边增加10点)。 这将强制您创build的宽度的边界。
-
使用代码来创build一个边框。 例如:
myTextButton.backgroundColor = .clear myTextButton.layer.cornerRadius = 5 myTextButton.layer.borderWidth = 2 myTextButton.layer.borderColor = UIColor.white.cgColor
-
通过编辑器(现在在Size Inspector下)或通过代码将左侧titleInset设置为2。 这看起来是以文本为中心,但是对于各种文本和文本大小,这个值可能是不同的。
这篇文章是针对XCode 8.1和Swift 3的。