Swift - TextView, который расширяется и остается в центре - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь реализовать идею, которая у меня возникла, но я застрял ..


Мне нужен TextView, который расширяется в обоих направлениях: widht-height.

Это имеет минимальную и максимальную ширину и минимальную высоту.

Это по центру в центре родительского (SCROLL) представления.

И у него есть кнопка send в нижней части в концечасть представления.

Вот идея:

enter image description here

Так что, если пользователь вводит в полезатем он расширяется в обоих направлениях.Но для него есть максимальная ширина (поэтому она не выходит за пределы экрана), но высота не ограничена: из-за родительского прокрутки.


Проблема в том, что высота textView не увеличивается, когда текст разбивается на новую строку.

Код:

func textViewDidChange(_ textView: UITextView) {
    self.adjustTextViewFrames(textView: textView)
}
func adjustTextViewFrames(textView : UITextView){

    var newSize = textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude))



    if newSize.width > self.view.bounds.width - 20 {
        newSize.width = self.view.bounds.width - (self.view.bounds.width/10)
    }

    messageBubbleTextViewWidthConstraint.constant = newSize.width
    messageBubbleTextViewHeightConstraint.constant = newSize.height

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

}

1 Ответ

0 голосов
/ 09 июня 2018

Попробуйте это:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // let's create our text view
        let textView = UITextView()
        textView.frame = CGRect(x: 0, y: 0, width: 200, height: 100)
        textView.backgroundColor = .lightGray
        textView.text = "Here is some default text that we want to show and it might be a couple of lines that are word wrapped"

        view.addSubview(textView)

        // use auto layout to set my textview frame...kinda
        textView.translatesAutoresizingMaskIntoConstraints = false
        [
            textView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
            textView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            textView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            textView.heightAnchor.constraint(equalToConstant: 50)
            ].forEach{ $0.isActive = true }

        textView.font = UIFont.preferredFont(forTextStyle: .headline)

        textView.delegate = self
        textView.isScrollEnabled = false

        textViewDidChange(textView)
    }

}

extension ViewController: UITextViewDelegate {

    func textViewDidChange(_ textView: UITextView) {
        print(textView.text)
        let size = CGSize(width: view.frame.width, height: .infinity)
        let estimatedSize = textView.sizeThatFits(size)

        textView.constraints.forEach { (constraint) in
            if constraint.firstAttribute == .height {
                constraint.constant = estimatedSize.height
            }
        }
    }

}

Кредит идет на Брайана Вонга из Let's Build That App здесь ссылка

...