0

私はこれを作成するのに苦労してきました。ここで多数の投稿を読みましたが、何が間違っているのかわかりません。

私は持っていUITextViewます。

高さを数値まで拡大し、スクロールを有効にしてその高さに固定したいと思います。

私は自分を設定UITextFieldDelegateし、以下を追加しました-

    func textViewDidChange(_ textView: UITextView) {
        let newSize = textView.sizeThatFits(CGSize(width: 0, height: CGFloat.greatestFiniteMagnitude))
        textView.frame.size = CGSize(width: 0, height: min(100, newSize.height))
    }

これを行うと、 が成長し続けることができます。

たとえば、高さ100で停止してスクロールしたいと思います。

    func textViewDidChange(_ textView: UITextView) {
        let newSize = textView.sizeThatFits(CGSize(width: 0, height: CGFloat.greatestFiniteMagnitude))

        let newHeight = min(100, newSize.height)

        textView.frame.size = CGSize(width: 0, height: newHeight)

        textView.isScrollEnabled = newHeight >= 100
    }

この時点で起こるのは、を にisScrollEnabled設定するとスクロールビューが縮小することだけtrueです。

top私の textView は、leadingtrailingその親にのみ固定されています。

スクロールが有効になったら、強制的に折りたたまないようにするにはどうすればよいですか?

編集

機能する以下を追加しましたが、固定高さの状態で何かを入力すると、テキストが「ぐらつく」ように見えます

    func textViewDidChange(_ textView: UITextView) {
        let newSize = textView.sizeThatFits(CGSize(width: 0, height: CGFloat.greatestFiniteMagnitude))

        let newHeight = min(100, newSize.height)

        textView.frame.size = CGSize(width: 0, height: newHeight)

        if newHeight >= 100 {
            textView.isScrollEnabled = true
            textView.heightAnchor.constraint(equalToConstant: 100).isActive = true
        } else {
            textView.isScrollEnabled = false
            textView.heightAnchor.constraint(equalToConstant: 100).isActive = false
        }
    }
4

1 に答える 1