首页 > 解决方案 > swift - 当文本为nil时如何隐藏标签

问题描述

我正在将 badgeLabel 添加到 cartBtn .. 在这里,如果它的计数为 0,我无法将整数转换为字符串并将字符串转换为整数以隐藏 badgeLabel

代码:

    public var badgeText: String? {
    didSet {
        let wasNil = NSString(string: badgeText ?? "0").integerValue <= 0
        badgeLabel.isHidden = badgeText == nil
        badgeLabel.text = badgeText
        setSize()

        if animated {

            let animations: () -> Void = { [weak badgeLabel] in
                badgeLabel?.layer.transform = CATransform3DMakeScale(1, 1, 1)
            }

            if wasNil {
                badgeLabel.layer.transform = CATransform3DMakeScale(0.1, 0.1, 0.1)
            }

            UIView.animate(withDuration: 0.5,
                           delay: 0.2,
                           usingSpringWithDamping: 0.3,
                           initialSpringVelocity: 0.3,
                           options: UIView.AnimationOptions(),
                           animations: animations,
                           completion: nil)
        }
    }
}
public var badgeBackgroundColor = UIColor.red {
    didSet {
        badgeLabel.backgroundColor = badgeBackgroundColor
    }
}

像这样将计数添加到标签

 let cartQty = UserDefaults.standard.value(forKey: "cartCount")
 cartBtn.badgeText = cartQty as? String

在这里,如果cartBtn.badgeText是零,那么我也正在展示badgeLabel,但如果它是零,我不想展示badgeLabel..怎么做帽子..请帮忙

标签: swiftnulllabel

解决方案


看起来你并没有真正使用动画wasNil。也不要使用 NSString,它现在是一个较旧的 API,您可以使用简单的Int初始化程序StringInt.

这是一些更新的代码:

public var badgeText: String? {
    didSet {
        // changing this variable name for clarity.
        let isTextAString: Bool = Int(badgeText ?? "") == nil

        badgeLabel.isHidden = isTextAString
        badgeLabel.text = badgeText

        setSize()

        if animated {
            UIView.animate(withDuration: 0.5,
                           delay: 0.2,
                           usingSpringWithDamping: 0.3,
                           initialSpringVelocity: 0.3,
                           options: UIView.AnimationOptions()) {

                self.badgeLabel?.layer.transform = CATransform3DMakeScale(1, 1, 1)

                // You can just do this `if` statement inside the animation block

                if isTextAString {
                     self.badgeLabel.layer.transform = CATransform3DMakeScale(0.1, 0.1, 0.1)
                }

            } completion: { (_) in }
        }
    }
}

推荐阅读