string - 使文本编辑器动态高度 SwiftUI

标签 string text dynamic swiftui height

我正在尝试创建一个不断增长的 TextEditor作为聊天 View 的输入。
例如,我们的目标是有一个可以扩展到 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
                                    }
                                })
                            })
我创建了一个字符串扩展名,它通过调用 string.numberOfLines() 返回换行符的数量。 var startHeight: CGFloat = 50问题:如果我粘贴一个包含很长文本的文本,当该字符串没有换行符时,它不会扩展。文本编辑器中的文本已损坏。
如何计算 TextEditor 的中断次数并在该位置放置一个新行字符?

最佳答案

我找到了解决办法!
对于其他试图解决这个问题的人:
我加了一个 Text与输入字段的宽度相同,然后使用 GeometryReader计算自动换行的文本的高度。然后,如果将高度除以字体大小,则会得到行数。
您可以隐藏文本字段(在 iOS 14 和 iOS 15 beta 3 中测试)

关于string - 使文本编辑器动态高度 SwiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68411824/

相关文章:

c++ - std::vector 的复制构造函数如何操作?

java - 如何将 JTextField 中的用户输入放入另一个方法中

r - 使用 str_detect 进行特殊符号模式搜索

c# - 动态控件的复杂 View 状态问题

c# - 访问动态创建的文本框文本

string - 在Elasticsearch中对关键字查询的句子

c# - 字符串的实际长度

c# - Entity Framework (代码优先)——动态构建模型

c++ - 如何从 const char * 类型字符串中删除换行符

java - 更改文件中的值 Java