如果我有一个UIButton安排使用自动布局,它的大小调整很好地适合它的内容。
如果我设置一个图像为按钮。图像,内在的大小似乎也解释了这一点。
然而,如果我调整按钮的titleEdgeInsets,布局不会考虑这一点,而是截断按钮标题。
我如何确保按钮的内在宽度占了嵌入?
编辑:
我正在使用以下:
[self.backButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
目标是在图像和文本之间添加一些分隔。
如果我有一个UIButton安排使用自动布局,它的大小调整很好地适合它的内容。
如果我设置一个图像为按钮。图像,内在的大小似乎也解释了这一点。
然而,如果我调整按钮的titleEdgeInsets,布局不会考虑这一点,而是截断按钮标题。
我如何确保按钮的内在宽度占了嵌入?
编辑:
我正在使用以下:
[self.backButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
目标是在图像和文本之间添加一些分隔。
当前回答
该选项在接口构建器中也可用。请看插图。我将左右各设为3。效果非常好。
其他回答
这个线程有点老了,但我自己也遇到了这个问题,并且能够通过使用负插入来解决它。例如,在这里替换你想要的填充值:
UIButton* myButton = [[UIButton alloc] init];
// setup some autolayout constraints here
myButton.titleEdgeInsets = UIEdgeInsetsMake(-desiredBottomPadding,
-desiredRightPadding,
-desiredTopPadding,
-desiredLeftPadding);
结合正确的自动布局约束,您最终会得到一个自动调整大小的按钮,其中包含图像和文本!如下所示,将desiredleftpa添加为10。
您可以看到按钮的实际帧并没有包含标签(因为标签向右移动了10个点,超出了边界),但是我们在文本和图片之间实现了10个点的填充。
该选项在接口构建器中也可用。请看插图。我将左右各设为3。效果非常好。
斯威夫特是这样做的:
extension UIButton {
override open var intrinsicContentSize: CGSize {
let intrinsicContentSize = super.intrinsicContentSize
let adjustedWidth = intrinsicContentSize.width + titleEdgeInsets.left + titleEdgeInsets.right
let adjustedHeight = intrinsicContentSize.height + titleEdgeInsets.top + titleEdgeInsets.bottom
return CGSize(width: adjustedWidth, height: adjustedHeight)
}
}
爱你斯威夫特
Swift 3基于pegpeg的答案:
extension UIButton {
override open var intrinsicContentSize: CGSize {
let intrinsicContentSize = super.intrinsicContentSize
let adjustedWidth = intrinsicContentSize.width + titleEdgeInsets.left + titleEdgeInsets.right
let adjustedHeight = intrinsicContentSize.height + titleEdgeInsets.top + titleEdgeInsets.bottom
return CGSize(width: adjustedWidth, height: adjustedHeight)
}
}
以上所有都无法在iOS 9+上运行,我所做的是:
添加宽度限制(当按钮没有任何文本时为最小宽度)。如果提供了文本,按钮将自动缩放) 将关系设置为大于或等于
现在要在按钮周围添加边框,只需使用下面的方法:
button.contentEdgeInsets = UIEdgeInsetsMake(0,20,0,20);