如何在以编程方式创建的 UIButton 上添加 padding-left?
Posted
技术标签:
【中文标题】如何在以编程方式创建的 UIButton 上添加 padding-left?【英文标题】:How to add padding-left on a UIButton created programmatically? 【发布时间】:2012-05-22 06:44:33 【问题描述】:在UIButton
上添加左填充时遇到问题。我有一个UIButton
和UIControlContentHorizontalAlignmentLeft
。我希望文本显示在左侧,但它太左了。当我给边界时,它看起来并不好。我想像在 CSS 中一样在大约 5px 的文本上添加一些填充。我搜索了解决方案,但找不到专门针对UIButton
的解决方案。
提前感谢您的帮助。
【问题讨论】:
嗨!请考虑在下面选择@LucasChwe 的答案作为正确答案。它似乎工作得更好...... 【参考方案1】:titleEdgeInsets 边缘的 inset 或 outset 边距 按钮标题绘制矩形。
@property(nonatomic) UIEdgeInsets titleEdgeInsets
讨论使用这个 属性来调整和重新定位有效的绘图矩形 按钮标题。您可以为每个 四个插图(上、左、下、右)。正值缩小,或 插入,该边缘 - 将其移近按钮的中心。一种 负值扩展或开始该边缘。使用 UIEdgeInsetsMake 函数为这个属性构造一个值。这 默认值为 UIEdgeInsetsZero。
可用性 适用于 ios 2.0 及更高版本。
在 UIButton.h 中声明
试试看:)
[myButton setTitleEdgeInsets:UIEdgeInsetsMake(0.0, 5.0, 0.0, 0.0)];
此外,如果您使用的是自定义按钮,则还有 Content Insets 和 Image Insets 之类的东西。
如果你在这里寻找 Swift。这是有效的 Swift 3.0 ?
myButton.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: 5.0, bottom: 0.0, right: 0.0)
你也可以直接设置。如果想使用一两个属性,这很有帮助。
myButton.titleEdgeInsets.top = 0
myButton.titleEdgeInsets.left = 5
myButton.titleEdgeInsets.bottom = 0
myButton.titleEdgeInsets.right = 0
【讨论】:
@VanDuTran 我也遇到了一个问题,在某些按钮上它正在工作,而在某些按钮上却没有。可能是因为按钮的限制,我一个一个地制作了每个限制以提升到用户限制,然后最后删除它们。一些按钮现在工作正常,但仍然存在一些按钮问题.....如果您已经找到解决方案,请分享。 @VanDuTran 解决方案是取消选中视图控制器文件检查器中的 autoLayout 选项 Swift 2.0 :myButton.titleEdgeInsets = UIEdgeInsets(top: 0, left: 5.0, bottom: 0, right: 0)
好电话。我会把它添加到帖子中。【参考方案2】:
发布 Xcode 8 如果你想通过界面构建器(IB)设置这些插图,你会在尺寸检查器而不是属性检查器中找到这些插图设置。
希望这会有所帮助。
【讨论】:
【参考方案3】:这是一个更好的答案:
避免截断按钮标题 避免标题超出范围 按钮的视图 使按钮框架与图像配合得很好。代码:
extension UIButton
func addLeftPadding(_ padding: CGFloat)
titleEdgeInsets = UIEdgeInsets(top: 0.0, left: padding, bottom: 0.0, right: -padding)
contentEdgeInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: padding)
用法:
myButton.addLeftPadding(10)
【讨论】:
Swift 版本,带有均匀的边距:let sidePadding: CGFloat = 20.0 titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -sidePadding, bottom: 0.0, right: -sidePadding) contentEdgeInsets = UIEdgeInsets(top: 0.0, left: sidePadding, bottom: 0.0, right: sidePadding)
谢谢@ArthurClemens
在我的情况下,标题是右对齐的,因为我不需要。如果我留下一行contentEdgeInsets = UIEdgeInsets(top: 0.0, left: padding, bottom: 0.0, right: padding)
修复它。【参考方案4】:
在 Xcode 6 中,您可以在 IB 中指定标题插入:
【讨论】:
这是一个很好的观点,但我发现使用上下文插入是要走的路。【参考方案5】:以下是另一个解决此问题的示例:
[self.myButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
float padding_button = 6.0f;
UIEdgeInsets titleInsets = UIEdgeInsetsMake(0.0f, padding_button, 0.0f, -padding_button);
UIEdgeInsets contentInsets = UIEdgeInsetsMake(padding_button, 0.0f, padding_button, 0.0f);
CGFloat extraWidthRequiredForTitle = titleInsets.left - titleInsets.right;
contentInsets.right += extraWidthRequiredForTitle;
[self.myButton setTitleEdgeInsets:titleInsets];
[self.myButton setContentEdgeInsets:contentInsets];
[self.myButton sizeToFit];
如果你的按钮有图片,你可以简单地添加:
[self.myButton setImage:[UIImage imageNamed:@"YourImage.png"] forState:UIControlStateNormal];
祝你好运!
【讨论】:
【参考方案6】:_myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
_myButton.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
【讨论】:
以上是关于如何在以编程方式创建的 UIButton 上添加 padding-left?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 XCTest 在以编程方式添加的 UIView 上测试 UILabel
如何向放置在 UIStackView 中的以编程方式创建的 UIButton 添加约束