ios - 如何对齐 UIImage 下面的 UIButton 中的文本,因为它没有正确显示

标签 ios swift iphone uibutton

我的导航有问题,我的按钮显示不正确。我想要 2 行,每行 3 个按钮。每个按钮都有一个图像和一个标签。标签应居中并位于图像下方。但这是我似乎无法正常工作的棘手事情,因为每次我启动模拟器时,第一个按钮看起来没问题,所有其他按钮都正确显示在图像的热量中,但不是标签。我试图弄乱按钮的大小,但注意似乎起作用了。

我还尝试使用 question 中的代码在 stackoverflow 上,但我没有正确锻炼。因为根本没有显示图像,但尺寸是正确的。此外,标签仅显示在第一个按钮上。

screenshot of navigation

我正在使用 IBDesignable 来扩展我分配给 ButtonUIButton

import UIKit

@IBDesignable
class VerticalButton: UIButton {

    @IBInspectable public var padding: CGFloat = 20.0 {
        didSet {
            setNeedsLayout()
        }
    }

    override var intrinsicContentSize: CGSize {
        let maxSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)

        if let titleSize = titleLabel?.sizeThatFits(maxSize), let imageSize = imageView?.sizeThatFits(maxSize) {
            let width = ceil(max(imageSize.width, titleSize.width))
            let height = ceil(imageSize.height + titleSize.height + padding)

            return CGSize(width: width, height: height)
        }

        return super.intrinsicContentSize
    }

    override func layoutSubviews() {
        if let image = imageView?.image, let title = titleLabel?.attributedText {
            let imageSize = image.size
            let titleSize = title.size()

            titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -imageSize.width, bottom: -(imageSize.height + padding), right: 0.0)
            imageEdgeInsets = UIEdgeInsets(top: -(titleSize.height + padding), left: 0.0, bottom: 0.0, right: -titleSize.width)
        }

        super.layoutSubviews()
    }

}

我猜我在计算按钮的 intrinsicContentSize 时出错了。 我还仔细检查了该类是否已分配给所有相关按钮,以及每个按钮是否都有标签。除此之外,我还检查了没有通过界面构建​​器设置的插图。

到目前为止,我没有运气找到解决方案,因此我提出了问题。我感谢您的帮助。如果您需要更多信息,请随时与我们联系。我很乐意提供它。

谢谢

最佳答案

感谢@DonMag 的帮助,我发现问题不在于代码,而在于图像的大小。

关于ios - 如何对齐 UIImage 下面的 UIButton 中的文本,因为它没有正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58542467/

相关文章:

ios - 如何使用 Realm 保存NSURL数组?

ios - 'NSInvalidArgumentException',原因 : '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

swift - 展开 optional 包装时意外发现nil,可在iPhone上的SIM卡崩溃中工作

iphone - 如何在 ios sdk 中增加和减少带有动画的图像 alpha 值?

ios - 生成声音(不是来自文件)

ios - 如何在 Swift 中将 [WeatherModel]() 分配给 JSON 类型?

ios - 减小 UITextView 的大小以显示 UIButton

swift - 如何访问 ioctl()

ios - iAd 错误 Cannot create a session after the response has committed

iphone - 如何对具有嵌套数组/字典的 NSArray 和 NSDictionary 进行真正的深度复制?