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

问题描述 投票:0回答:8

还在学习 Swift,不了解 Objective-C。我看到为了以编程方式更改按钮的文本需要使用

titleEdgeInsets
但我不太确定如何使用它。

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

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

ios iphone swift uibutton
8个回答
172
投票

仍然有效:

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) 

64
投票

iOS 10 和 Swift 3 示例

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

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

32
投票

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

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.

27
投票

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


6
投票

适用于 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()
}

0
投票

iOS 15

contentEdgeInsets
已弃用,因此您需要使用以下...

var configuration = UIButton.Configuration.plain() // there are several options to choose from instead of .plain()
configuration.contentInsets = NSDirectionalEdgeInsets(top: 24, leading: 24, bottom: 24, trailing: 24)
button.configuration = configuration

-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()

-2
投票

适用于 xcode 13.4 和 iOS 12 已测试并工作 为按钮两侧留出空间

ButtonName.contentEdgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
© www.soinside.com 2019 - 2024. All rights reserved.