gpt4 book ai didi

ios - 在 UIButton 上左对齐图像和居中文本

转载 作者:IT王子 更新时间:2023-10-29 07:35:29 25 4
gpt4 key购买 nike

我看过关于右对齐的帖子,但我无法让左对齐工作。我希望按钮占据屏幕的宽度,左侧是图像,中间是标题/文本。

这不起作用(至少可靠):

    button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setImageEdgeInsets:UIEdgeInsetsMake(0, -60.0, 0, 0)];
button.frame = CGRectMake((self.view.frame.size.width - w ) / 2, self.view.frame.size.height - 140.0, self.view.frame.size.width - 10.0, 40.0);

最佳答案

此解决方案适用于 Swift 3,尊重原始内容和图像边缘插入,同时保持标题标签始终在可用空间居中,这使得调整边距变得更加容易。

它覆盖了 titleRect(forContentRect:) 方法并返回正确的框架:

@IBDesignable
class LeftAlignedIconButton: UIButton {
override func titleRect(forContentRect contentRect: CGRect) -> CGRect {
let titleRect = super.titleRect(forContentRect: contentRect)
let imageSize = currentImage?.size ?? .zero
let availableWidth = contentRect.width - imageEdgeInsets.right - imageSize.width - titleRect.width
return titleRect.offsetBy(dx: round(availableWidth / 2), dy: 0)
}
}

以下插图:

enter image description here

会导致这样:

enter image description here


弃用之前的答案

这在大多数情况下都有效,但某些布局会导致 layoutSubviews 在死循环中递归调用自身,因此谨慎使用

@IBDesignable
class LeftAlignedIconButton: UIButton {
override func layoutSubviews() {
super.layoutSubviews()
contentHorizontalAlignment = .left
let availableSpace = UIEdgeInsetsInsetRect(bounds, contentEdgeInsets)
let availableWidth = availableSpace.width - imageEdgeInsets.right - (imageView?.frame.width ?? 0) - (titleLabel?.frame.width ?? 0)
titleEdgeInsets = UIEdgeInsets(top: 0, left: availableWidth / 2, bottom: 0, right: 0)
}
}

此代码将执行相同的操作,但将图标对齐到右边缘:

@IBDesignable
class RightAlignedIconButton: UIButton {
override func layoutSubviews() {
super.layoutSubviews()
semanticContentAttribute = .forceRightToLeft
contentHorizontalAlignment = .right
let availableSpace = UIEdgeInsetsInsetRect(bounds, contentEdgeInsets)
let availableWidth = availableSpace.width - imageEdgeInsets.left - (imageView?.frame.width ?? 0) - (titleLabel?.frame.width ?? 0)
titleEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: availableWidth / 2)
}
}

enter image description here

右对齐版本使用 semanticContentAttribute 因此它需要 iOS 9+。

关于ios - 在 UIButton 上左对齐图像和居中文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10954880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com