使 TextEditor 动态高度 SwiftUI

Fab*_*bio 5 string height text dynamic swiftui

TextEditor我正在尝试为聊天视图创建不断增长的输入。

目标是拥有一个可以扩展的盒子,例如达到 6 行。之后它应该是可滚动的。

我已经设法使用包含换行符的字符串来做到这一点\n

                        TextEditor(text: $composedMessage)
                            .onChange(of: self.composedMessage, perform: { value in
                                withAnimation(.easeInOut(duration: 0.1), {
                                    if (value.numberOfLines() < 6) {
                                        height = startHeight + CGFloat((value.numberOfLines() * 20))
                                    }
                                    if value.numberOfLines() == 0 || value.isEmpty {
                                        height = 50
                                    }
                                })
                            })
Run Code Online (Sandbox Code Playgroud)

我创建了一个字符串扩展,它通过调用返回换行符的数量string.numberOfLines() var startHeight: CGFloat = 50

问题:如果我粘贴包含很长文本的文本,当该字符串没有换行符时,它不会扩展。文本编辑器中的文本被破坏。

如何计算文本编辑器的中断次数并在该位置放置新行字符?

Fab*_*bio 1

我找到了解决办法!

对于其他试图解决此问题的人:

我添加了一个Text与输入字段相同宽度的,然后使用了GeometryReader计算自动换行的文本的高度。然后,如果将高度除以字体大小,则可以得到行数。

您可以隐藏文本字段(在 iOS 14 和 iOS 15 beta 3 中测试)