Swift中调整Button的sizeToFit():增加左右边距的方法
Hey there! I totally get it—sizeToFit() does a great job making your button and labels fit their content perfectly, but that button text crammed right up against the edges is super annoying. Let's fix that with a few straightforward, practical solutions:
1. Use contentEdgeInsets (Quickest Native Fix)
UIButton has a built-in property called contentEdgeInsets that lets you add padding between the button's edges and its content (text or image). This works seamlessly with sizeToFit() because the method will automatically account for these insets when calculating the button's final size.
Swift Example:
// Add 8px of padding to left and right; keep top/bottom as default yourButton.contentEdgeInsets = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8) yourButton.sizeToFit()
Objective-C Example:
// Add 8px horizontal padding yourButton.contentEdgeInsets = UIEdgeInsetsMake(0, 8, 0, 8); [yourButton sizeToFit];
Just tweak the left and right values to whatever pixel count you need—this is the fastest way to get the padding you want without extra complexity.
2. Create a Custom Button Subclass (For Reusable Style)
If you have multiple buttons that need this extra padding, creating a custom subclass will save you from repeating code every time. Every instance of this button will automatically include your desired padding when you call sizeToFit().
Swift Subclass Example:
class PaddedButton: UIButton { // Set your preferred horizontal padding here private let horizontalPadding: CGFloat = 8 override func sizeThatFits(_ size: CGSize) -> CGSize { // Get the default fitting size from the superclass var fittingSize = super.sizeThatFits(size) // Add double the padding (left + right) fittingSize.width += horizontalPadding * 2 return fittingSize } override func layoutSubviews() { super.layoutSubviews() // Ensure content stays centered with the padding applied contentEdgeInsets = UIEdgeInsets(top: 0, left: horizontalPadding, bottom: 0, right: horizontalPadding) } }
Now just use PaddedButton instead of the standard UIButton, and you won't have to manually set insets for every button.
3. Auto Layout Alternative (If You're Moving Away from sizeToFit())
If you're shifting to Auto Layout instead of relying on sizeToFit(), you can add padding directly via constraints. When setting leading/trailing constraints to the button's superview, adjust the constant value to create extra space:
// Example: Add 16px padding on left and right relative to the superview yourButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16).isActive = true yourButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16).isActive = true
Auto Layout will automatically calculate the button's width based on its content plus the padding from the constraints.
内容的提问来源于stack exchange,提问作者Ryan B.

