如果我有一个UIButton安排使用自动布局,它的大小调整很好地适合它的内容。

如果我设置一个图像为按钮。图像,内在的大小似乎也解释了这一点。

然而,如果我调整按钮的titleEdgeInsets,布局不会考虑这一点,而是截断按钮标题。

我如何确保按钮的内在宽度占了嵌入?

编辑:

我正在使用以下:

[self.backButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];

目标是在图像和文本之间添加一些分隔。


当前回答

该选项在接口构建器中也可用。请看插图。我将左右各设为3。效果非常好。

其他回答

你没有指定如何设置insets,所以我猜你在使用titleEdgeInsets,因为我看到你得到了相同的效果。如果我使用contenttedgeinsets代替它正常工作。

- (IBAction)ChangeTitle:(UIButton *)sender {
    self.button.contentEdgeInsets = UIEdgeInsetsMake(0,20,0,20);
    [self.button setTitle:@"Long Long Title" forState:UIControlStateNormal];
}

为什么不重写UIView上的intrinsicContentSize方法?例如:

- (CGSize) intrinsicContentSize
{
    CGSize s = [super intrinsicContentSize];

    return CGSizeMake(s.width + self.titleEdgeInsets.left + self.titleEdgeInsets.right,
                      s.height + self.titleEdgeInsets.top + self.titleEdgeInsets.bottom);
}

这应该告诉自动布局系统,它应该增加按钮的大小,以允许插入和显示全文。我不在我自己的电脑前,所以我还没有测试这个。

以上所有都无法在iOS 9+上运行,我所做的是:

添加宽度限制(当按钮没有任何文本时为最小宽度)。如果提供了文本,按钮将自动缩放) 将关系设置为大于或等于

现在要在按钮周围添加边框,只需使用下面的方法:

button.contentEdgeInsets = UIEdgeInsetsMake(0,20,0,20);

你可以在Interface Builder中(不需要编写任何代码),通过使用消极和积极的标题和内容插入的组合来让它工作。

更新:Xcode 7有一个错误,你不能在右插入字段中输入负值,但你可以使用它旁边的步进控件来减小值。(感谢Stuart)

这样做将在图像和标题之间增加8pt的间距,并将增加相同数量的按钮的固有宽度。是这样的:

我想在我的UIButton图标和标签之间添加一个5pt的空间。我是这样做到的:

UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeCustom];
// more button config etc
infoButton.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 5);
infoButton.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 0, -5);

contenttedgeinsets, titleEdgeInsets和imageEdgeInsets相互关联的方式需要从每个insets中进行一点给予和获取。因此,如果你在标题的左边添加了一些插入,你就必须在右边添加负插入,并在内容的右边提供更多的空间(通过正插入)。

通过添加一个右边的内容插入,以匹配标题插入的移位,我的文本不会超出按钮的界限。