Как сделать выезжающее из-под uitextfield оповещение?

Есть следующий дизайн:
5a1d79e5e80a0182314265.jpeg
Красная область выезжает из-под uitextfield. Лучше сделать это, как hidden uiview с округленными боками, или нарисовать кастомный uiview в такой форме?
  • Вопрос задан
  • 381 просмотр
Решения вопроса 1
doublench21
@doublench21 Куратор тега Swift
Ну наверно как-то так, хотя за правильность я не ручаюсь.
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var textField: UITextField!
    private var substrateView = UIView()
    private var substrateLabel = UILabel()
    private var constraint = NSLayoutConstraint()

    @IBAction func someAction(_ sender: Any) {
        substrateView.isHidden = false
        UIView.animate(withDuration: 0.3) { [unowned self] in
            self.constraint.isActive = false
            self.constraint = self.substrateView.heightAnchor.constraint(equalToConstant: 60)
            self.constraint.isActive = true
            self.view.layoutIfNeeded()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        textField.layer.borderWidth = 3
        textField.layer.borderColor = UIColor(red: 233/255, green: 128/255, blue: 129/255, alpha: 1).cgColor
        textField.layer.cornerRadius = 8

        substrateView.backgroundColor = UIColor(red: 233/255, green: 128/255, blue: 129/255, alpha: 1)
        substrateView.layer.cornerRadius = 8

        substrateLabel.text = "Login is not valid"
        substrateLabel.textAlignment = .center
        substrateLabel.textColor = UIColor.white
        substrateLabel.backgroundColor = UIColor.clear

        substrateView.addSubview(substrateLabel)

        substrateLabel.translatesAutoresizingMaskIntoConstraints = false
        substrateLabel.frame = CGRect.zero
        substrateLabel.sizeToFit()
        substrateLabel.bottomAnchor.constraint(equalTo: substrateView.bottomAnchor).isActive = true
        substrateLabel.centerXAnchor.constraint(equalTo: substrateView.centerXAnchor).isActive = true

        view.addSubview(substrateView)

        substrateView.translatesAutoresizingMaskIntoConstraints = false
        substrateView.topAnchor.constraint(equalTo: textField.topAnchor).isActive = true
        substrateView.leftAnchor.constraint(equalTo: textField.leftAnchor).isActive = true
        substrateView.rightAnchor.constraint(equalTo: textField.rightAnchor).isActive = true
        substrateView.widthAnchor.constraint(equalTo:textField.widthAnchor).isActive = true

        constraint = substrateView.heightAnchor.constraint(equalTo: textField.heightAnchor)
        constraint.isActive = true

        textField.layer.zPosition = 1
        substrateView.isHidden = true
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}


Вышло как-то так:
giphy.gif
Конечно сам action выберешь такой какой тебе нужен. На гифке - вызывается просто по нажатию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы