在 Swift 中以编程方式更改 UIButton 的文本(填充)

Posted

技术标签:

【中文标题】在 Swift 中以编程方式更改 UIButton 的文本(填充)【英文标题】:Change a UIButton's text (padding) programmatically in Swift 【发布时间】:2015-09-29 22:37:28 【问题描述】:

仍在学习 Swift,不了解 Objective-C。我看到为了以编程方式更改按钮的文本需要使用titleEdgeInsets,但我不确定如何使用它。

我想更改底部和左右按钮(填充)中的文本。

感谢您的任何回复和/或示例!

【问题讨论】:

【参考方案1】:

如果您不想在每次创建按钮时都定义属性,也可以使用自定义类;

class UIPaddedButton: UIButton 
  let padding = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10)

  required init?(coder: NSCoder) 
    super.init(coder: coder)
  

  override init(frame: CGRect) 
    super.init(frame: frame)
  

  override func titleRect(forContentRect contentRect: CGRect) -> CGRect 
    return contentRect.inset(by: padding)
  

并且在初始化的时候;

let btn = UIPaddedButton()

【讨论】:

不太正确。 调整 titleRect 相当困难。您必须遵循与此类似的程序:***.com/a/58876988/294884【参考方案2】:

仍然适用于: ios 12/Xcode 10/Swift 4.2/OSX 10.13.2


iOS 9.1/Xcode 7.1/Swift 2.1/OSX 10.10.5:

titleEdgeInsets 方法对我不起作用。我的按钮框架紧紧地拥抱文本(我没有指定框架大小),并且框架具有红色背景色。完成后:

 myButton.titleEdgeInsets = UIEdgeInsetsMake(10,10,10,10)

红色背景每边向内缩小了 10 个像素,这意味着现在一些文本位于红色背景之外。使用负值对原始帧大小没有影响。

通过以下方式,我能够在文本周围进行填充,有效地使框架变大:

myButton.contentEdgeInsets = UIEdgeInsetsMake(5,5,5,5) 

【讨论】:

@Nik Kov,谢谢。 新方法被调用:UIEdgeInsets.init(top: #, left:#, :bottom: #, right: #) @Andrea,UIEdgeInsetsMake() 仍在文档中:developer.apple.com/documentation/uikit/… @Andrea,如果你打电话给UIEdgeInsetsMake(5,5,5,5),你会收到警告吗? titleEdgeInsets 在 iOS 15 中已弃用 :(【参考方案3】:

iOS 10 和 Swift 3 示例

在 IOS 11 和 Swift 4 上测试并运行。

refineButton.contentEdgeInsets = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)

【讨论】:

如果文本被截断,同时使用titleEdgeInsets,将其替换为contentEdgeInsets【参考方案4】:

您也可以在故事板中执行此操作:

【讨论】:

“以编程方式”指定的问题 我不会假装给出最佳答案。只是为了完整的信息。 这很有用,@aeid 有时我会“以编程方式”搜索,因为我在情节提要中找不到它 我没有以编程方式或情节提要搜索,因为我不在乎任何一种方式。很高兴知道它在那里【参考方案5】:

适用于 iOS 9.1/Xcode 7.1/Swift 2.1

@IBOutlet weak var ratingButton: UIButton!

override func viewDidLoad() 
    ratingButton.contentEdgeInsets = UIEdgeInsets(top:15,right:10,bottom:15,left:10)

    super.viewDidLoad()

【讨论】:

【参考方案6】:

您可以通过执行这些代码行从顶部、左侧、右侧和底部添加填充。

button.titleEdgeInsets.left = 10; // add left padding.
button.titleEdgeInsets.right = 10; // add right padding.
button.titleEdgeInsets.top = 10; // add top padding.
button.titleEdgeInsets.bottom = 10; // add bottom padding.

【讨论】:

以上是关于在 Swift 中以编程方式更改 UIButton 的文本(填充)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中以编程方式调整 UIButton 中文本的字体大小以适应宽度?

在 Swift 中以编程方式切换视图

如何在 Swift 中以编程方式更改 UICollectionViewCell 大小?

如何在 Swift 中以编程方式更改设备方向?

如何在 Swift 中以编程方式更改自定义 UITableViewCell 中按钮的背景颜色?

我可以在 Swift 5 和 IOS 12 中以编程方式更改 iOS 屏幕壁纸吗