topLayoutGuide.length устарела - PullRequest
0 голосов
/ 04 мая 2020

Я все еще новичок в xCode и был бы рад, если бы кто-нибудь мог мне помочь. Это мой код:

if(magnetLinkTextField.frame.origin.y<=0) {
            UIView.animate(withDuration: 0.2, animations: {
                self.magnetLinkTextField.frame = CGRect(x: self.magnetLinkTextField.frame.origin.x,
                                                        y: self.topLayoutGuide.length,
                                                        width: self.magnetLinkTextField.frame.size.width,
                                                        height: self.magnetLinkTextField.frame.size.height)
            }
        }

Как мне реализовать следующее:

'topLayoutGuide' устарел в iOS 11.0: используйте view.safeAreaLayoutGuide.topAnchor вместо topLayoutGuide .bottomAnchor

1 Ответ

0 голосов
/ 04 мая 2020

Я создаю этот программный пример для вас с автоматическим размещением и копированием анимации и вставкой в ​​новый проект, чтобы увидеть его: сначала объявите свое текстовое поле и кнопку (для активации анимации) в классе ViewController

let yourTextfield = UITextField()
let button = UIButton()

после которые объявляют ограничения var для использования в анимации:

var goToTop: NSLayoutConstraint?
var stayHere: NSLayoutConstraint?

теперь в viewDidLoad создайте текстовое поле и кнопку, назначьте действие кнопке, представьте их и добавьте ограничение:

view.backgroundColor = .red

    button.backgroundColor = .blue
    button.setTitle("put on top", for: .normal)
    button.setTitleColor(.white, for: .normal)
    button.addTarget(self, action: #selector(handleGo), for: .touchUpInside)
    button.translatesAutoresizingMaskIntoConstraints = false

    yourTextfield.attributedPlaceholder = NSAttributedString(string: "Your textfield", attributes: [.foregroundColor: UIColor(white: 0, alpha: 0.3)])
    yourTextfield.textColor = .black
    yourTextfield.backgroundColor = UIColor(white: 1, alpha: 0.5)
    yourTextfield.translatesAutoresizingMaskIntoConstraints = false

    view.addSubview(yourTextfield)
    yourTextfield.widthAnchor.constraint(equalToConstant: 300).isActive = true
    yourTextfield.heightAnchor.constraint(equalToConstant: 50).isActive = true
    yourTextfield.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    stayHere = yourTextfield.centerYAnchor.constraint(equalTo: view.centerYAnchor)
    stayHere?.isActive = true
    goToTop = yourTextfield.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)

    view.addSubview(button)
    button.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
    button.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 20).isActive = true
    button.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -20).isActive = true
    button.heightAnchor.constraint(equalToConstant: 50).isActive = true

Теперь напишите функцию для анимации:

@objc fileprivate func handleGo() {
    UIView.animate(withDuration: 0.5, animations: {
        self.stayHere?.isActive = false
        self.goToTop?.isActive = true
        self.view.layoutIfNeeded()
    }, completion: nil)
}

enter image description here

это результат, адаптируйте его к своему проекту ... Надеюсь, что это поможет:)

...