Autolayout-UIButton的内部大小不包括标题嵌入

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

如果我有一个UIButton安排使用autolayout,它的大小调整很好地适应它的内容。

如果我将图像设置为button.image,内在的大小似乎再次解释了这一点。

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

如何确保按钮的内在宽度说明嵌入?

编辑:

我使用的方法如下:

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

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

提问于
用户回答回答于

无需覆盖任何方法或设置任意宽度约束,就可以解决此问题。可以在InterfaceBuilder中完成这一切,如下所示。

  • 内禀按钮宽度是从标题宽度加上图标宽度加上左和右的宽度导出的。含量边缘信息。
  • 如果一个按钮同时具有图像和文本,则它们以组的形式居中,没有中间的填充。
  • 如果添加了一个左内容内嵌,它是相对于文本计算的,而不是文本+图标。
  • 如果设置了一个负的左图像嵌入,图像将被拉出到左边,但整体按钮的宽度不受影响。
  • 如果设置了一个负的左图像嵌入,则实际布局使用该值的一半。因此,要得到一个-20点左内嵌,必须在接口生成器中使用一个-40点左内嵌值。

因此,提供了一个足够大的左内容嵌入集,以便为两个所需的左嵌创建空间。图标与文本之间的内部填充,然后将图标与文本之间的填充量加倍,从而将图标左移。结果是一个具有相同左右内容嵌入的按钮,以及一个文本和图标对,它们以组为中心,并在它们之间填充特定数量的内容。

一些示例值:

// Produces a button with the layout:
// |-20-icon-10-text-20-|
// AutoLayout intrinsic width works as you'd desire.
button.contentEdgeInsets = UIEdgeInsetsMake(10, 30, 10, 20)
button.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0)
用户回答回答于

可以在InterfaceBuilder中使用它(不需要编写任何代码),方法是使用负面和正面标题和内容嵌入的组合。

更新__:Xcode 7有一个错误,无法在Right内嵌字段,但是可以使用它旁边的Steper控件来减少值。(谢谢斯图尔特)

这样做将增加8PT之间的图像和标题之间的间隔,并将增加同样数量的按钮固有宽度。就像这样:

扫码关注云+社区