Как переключить скрытие imageView из подкласса UIButton - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть подкласс UIButton, и у него есть инициализатор, который принимает имя и логическое значение. У меня есть функция для переключения скрытия и отображения imageView, и мой автоматический макет установлен на то, когда imageView скрывает привязку, перемещает в другой imageView. В этом я использую приоритет содержания контента программно. так вот мой код, можете ли вы показать мне, почему мой uiimageView не скрывается.

// This is in my subclass of UIButton
let profileLbl = UILabel()
    let badgeImageView = UIImageView()
    let rightArrowImageView = UIImageView()

    var isHiddenBadge = false

    var visibleProfileTrailingConstraint: NSLayoutConstraint!
    var hiddenProfileTrailingConstraint: NSLayoutConstraint!

    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = .white
        configure()
    }

    init(name: String, isBadgeHidden: Bool = false) {
        super.init(frame: .zero)
        profileLbl.text = name
        profileLbl.font = UIFont(name: "NunitoSans-SemiBold", size: 16)
        profileLbl.textColor = #colorLiteral(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)
        isHiddenBadge = isBadgeHidden
        toggleHide(badge: isHiddenBadge)
        configure()
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    private func configure() {
        translatesAutoresizingMaskIntoConstraints = false
        [profileLbl, badgeImageView, rightArrowImageView].forEach({ v in
            v.translatesAutoresizingMaskIntoConstraints = false
            addSubview(v)
        })

        visibleProfileTrailingConstraint = profileLbl.trailingAnchor.constraint(equalTo: badgeImageView.leadingAnchor, constant: -5)
        hiddenProfileTrailingConstraint = profileLbl.trailingAnchor.constraint(equalTo: rightArrowImageView.leadingAnchor, constant: -5)

        visibleProfileTrailingConstraint.priority   = .defaultHigh
        hiddenProfileTrailingConstraint.priority    = .defaultLow

        badgeImageView.image = #imageLiteral(resourceName: "warning_error 1")
        rightArrowImageView.image = #imageLiteral(resourceName: "ic-arrow-right")
        NSLayoutConstraint.activate([
            profileLbl.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 24),
            profileLbl.centerYAnchor.constraint(equalTo: centerYAnchor),
            visibleProfileTrailingConstraint,
            hiddenProfileTrailingConstraint,

            badgeImageView.centerYAnchor.constraint(equalTo: centerYAnchor),
            badgeImageView.widthAnchor.constraint(equalToConstant: 24),
            badgeImageView.heightAnchor.constraint(equalToConstant: 24),

            rightArrowImageView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -24),
            rightArrowImageView.centerYAnchor.constraint(equalTo: centerYAnchor),
            rightArrowImageView.widthAnchor.constraint(equalToConstant: 16),
            rightArrowImageView.heightAnchor.constraint(equalToConstant: 16)
        ])
    }

    private func toggleHide(badge: Bool) {

        if badge == false {

            if badgeImageView.isHidden {

                badgeImageView.isHidden = false
                visibleProfileTrailingConstraint.priority   = .defaultHigh
                hiddenProfileTrailingConstraint.priority    = .defaultLow
            }

        } else {
            visibleProfileTrailingConstraint.priority   = .defaultLow
            hiddenProfileTrailingConstraint.priority    = .defaultHigh
            badgeImageView.isHidden = true
        }
    }

// I initialise it in my viewController
let infoBtn             = GTProfileBtn(name: "Basic Info", isBadgeHidden: false)

// this is when I try to test it in my viewDidLoad
infoBtn.isHiddenBadge = true

1 Ответ

1 голос
/ 10 апреля 2020

Используйте следующее

var isHiddenBadge = false {
    didSet {
        toggleHide(badge: isHiddenBadge)
    }
}

Проблема в том, что вы не вызываете toggleHide после установки isHiddenBadge. Приведенный выше код решит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...