如果我有一个UIButton安排使用自动布局,它的大小调整很好地适合它的内容。
如果我设置一个图像为按钮。图像,内在的大小似乎也解释了这一点。
然而,如果我调整按钮的titleEdgeInsets,布局不会考虑这一点,而是截断按钮标题。
我如何确保按钮的内在宽度占了嵌入?
编辑:
我正在使用以下:
[self.backButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
目标是在图像和文本之间添加一些分隔。
如果我有一个UIButton安排使用自动布局,它的大小调整很好地适合它的内容。
如果我设置一个图像为按钮。图像,内在的大小似乎也解释了这一点。
然而,如果我调整按钮的titleEdgeInsets,布局不会考虑这一点,而是截断按钮标题。
我如何确保按钮的内在宽度占了嵌入?
编辑:
我正在使用以下:
[self.backButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
目标是在图像和文本之间添加一些分隔。
当前回答
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)
}
}
其他回答
斯威夫特是这样做的:
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)
}
}
为什么不重写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);
}
这应该告诉自动布局系统,它应该增加按钮的大小,以允许插入和显示全文。我不在我自己的电脑前,所以我还没有测试这个。
我使用的解决方案是在按钮上添加宽度限制。然后在初始化的某个地方,在你的文本设置好之后,像这样更新宽度约束:
self.buttonWidthConstraint.constant = self.shareButton.intrinsicContentSize.width + 8;
8是你的插入数。
该选项在接口构建器中也可用。请看插图。我将左右各设为3。效果非常好。