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

UIButton 上添加左填充时遇到问题。我有一个UIButtonUIControlContentHorizontalAlignmentLeft。我希望文本显示在左侧,但它太左了。当我给边界时,它看起来并不好。我想像在 CSS 中一样在大约 5px 的文本上添加一些填充。我搜索了解决方案,但找不到专门针对UIButton 的解决方案。 提前感谢您的帮助。

【问题讨论】:

  • 嗨!请考虑在下面选择@LucasChwe 的答案作为正确答案。它似乎工作得更好......

标签: swift xcode uibutton padding imageedgeinsets


【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多