如何在以编程方式创建的 UIButton 上添加 padding-left?

Posted

技术标签:

【中文标题】如何在以编程方式创建的 UIButton 上添加 padding-left?【英文标题】:How to add padding-left on a UIButton created programmatically? 【发布时间】:2012-05-22 06:44:33 【问题描述】:

UIButton 上添加左填充时遇到问题。我有一个UIButtonUIControlContentHorizontalAlignmentLeft。我希望文本显示在左侧,但它太左了。当我给边界时,它看起来并不好。我想像在 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 添加约束

在以编程方式创建的 UIView 层次结构之上添加子视图

以编程方式创建的 UIButton 为目标

如何使用自动布局在 ios 中以编程方式在 UIview 上添加 UIbutton

IOS5 - 如何在以编程方式创建的视图中播放视频?