Обновлена ​​проблема анимации NSLayoutConstraint - PullRequest
0 голосов
/ 29 июня 2019

Это простой тест, все коды, как показано ниже, почему lblA не имеет анимации при изменении ширины на 30?но он имеет анимацию, когда ширина изменилась на 300.

import UIKit

class ViewController: UIViewController {
    let lblA = UILabel()
    var lblAWidthConstraint: NSLayoutConstraint?
    var tag = false
//  let lblB = UILabel()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.lblA.backgroundColor = .red

        self.view.addSubview(self.lblA)
        self.lblA.translatesAutoresizingMaskIntoConstraints = false
        self.view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|[v]"
            , options: []
            , metrics: nil
            , views: ["v" : self.lblA]))
        self.view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v]|"
            , options: []
            , metrics: nil
            , views: ["v" : self.lblA]))

        let widthConstraint = self.lblA.widthAnchor.constraint(equalToConstant: 30)

        widthConstraint.isActive = true
        self.lblAWidthConstraint = widthConstraint

        //
        let tap = UITapGestureRecognizer(target: self, action: #selector(tapView))

        self.view.addGestureRecognizer(tap)
    }

    @objc func tapView() {
        tag = !tag

        self.lblAWidthConstraint?.constant = tag ? 300 : 30

        UIView.animate(withDuration: 0.3) {
            self.view.layoutIfNeeded()
        }
    }
}

[ОБНОВЛЕНИЕ] Наконец, я нашел это: Кадр анимации UILabel плавно

...