UITextView проблема с нижней привязкой iOS - PullRequest
0 голосов
/ 07 сентября 2018

Я создал контейнер ввода для одного приложения чата. Контейнер сделан из одного: UIView, который содержит UIImageView, UITextView и UIButton все сделано программно. Но проблема в том, что я не могу сдвинуть UITextView снизу. Это немного покрывает клавиатура. Ввод bottomAnchor не двигает UITextView, но topAnchor работает нормально. Вот изображение:

enter image description here

Я перепробовал много подходов, но не могу заставить его работать. Вот код UITextView и constraints:

lazy var inputTextField: UITextView = {
    let textField = UITextView()
    textField.text = "Enter message..."
    textField.translatesAutoresizingMaskIntoConstraints = false
    textField.font = UIFont(name: (textField.font?.fontName)!, size: 18)
    textField.layer.borderWidth = 1
    textField.layer.borderColor = UIColor.gray.cgColor
    textField.layer.cornerRadius = 25
    textField.textContainerInset = UIEdgeInsets(top: 15.0, left: 8.0, bottom: 0, right: 8.0)
    textField.delegate = self
    return textField
}()

И ограничения:

        addSubview(self.inputTextField)
    //x,y,w,h
    self.inputTextField.leftAnchor.constraint(equalTo: uploadImageView.rightAnchor, constant: 8).isActive = true
    self.inputTextField.rightAnchor.constraint(equalTo: sendButton.leftAnchor).isActive = true
    self.inputTextField.heightAnchor.constraint(equalTo: heightAnchor).isActive = true
    self.inputTextField.topAnchor.constraint(equalTo: separatorLineView.topAnchor, constant: 5.0).isActive = true

//bottom anchor doesn't work
    self.inputTextField.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 5.0)
        .isActive = true

Не уверен, что я делаю не так. Любая помощь будет принята с благодарностью. Спасибо

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

попробуйте это!

self.inputTextField.leftAnchor.constraint(equalTo: uploadImageView.rightAnchor, constant: 8).isActive = true
self.inputTextField.rightAnchor.constraint(equalTo: sendButton.leftAnchor).isActive = true
self.inputTextField.topAnchor.constraint(equalTo: separatorLineView.topAnchor, constant: 5.0).isActive = true
self.inputTextField.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 5.0).isActive = true

Проблема в том, что вы уже указали высоту, поэтому нижний анкер бесполезен! Я надеюсь, что помог вам!

0 голосов
/ 07 сентября 2018

Из приведенного ниже кода это не сработает, поскольку заданы ограничения по высоте, поэтому будут работать либо top, либо Height, либо Bottom и Height.

    addSubview(self.inputTextField)
//x,y,w,h
self.inputTextField.leftAnchor.constraint(equalTo: uploadImageView.rightAnchor, constant: 8).isActive = true
self.inputTextField.rightAnchor.constraint(equalTo: sendButton.leftAnchor).isActive = true
self.inputTextField.heightAnchor.constraint(equalTo: heightAnchor).isActive = true
self.inputTextField.topAnchor.constraint(equalTo: separatorLineView.topAnchor, constant: 5.0).isActive = true

//bottom anchor doesn't work
    self.inputTextField.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 5.0)
        .isActive = true

В вашем сценарии вы должны изменить ограничения separatorLineView (т.е. скрыть separatorLineView bottomConstraints, просто переместите separatorLineView немного больше верха, это автоматически переместит ваше текстовое поле в нужную позицию.

Надеюсь, это поможет вам!

0 голосов
/ 07 сентября 2018

попробуйте так

let topConstraint = NSLayoutConstraint(item: inputTextField, attribute: NSLayoutAttribute.left, relatedBy: NSLayoutRelation.equal, toItem: separatorLineView, attribute: NSLayoutAttribute.bottom, multiplier: 1, constant: 0)

NSLayoutConstraint.activate([topConstraint])
...