我正在尝试创建TextEditor
的列表,作为SwiftUI应用程序的一部分。我希望各个编辑者不要滚动,因为它们构成了较大的滚动列表。但是,当我将TextEditor添加到列表时,它们会向下压缩,并且每个视图都可以单独滚动。是否有修饰符/技巧可以使TextEditor始终适合其文本内容而无需滚动,所以我可以实现这一目标?
下面是我要尝试做的一个最小示例:
struct ParentView: View {
var items: [Item]
var body: some View {
List(items, id: \.id) { item in
EditorView(item: item)
}
}
}
struct EditorView: View {
@ObservedObject var item: Item
var body: some View {
TextEditor(text: $item.text)
}
}
如果存在平台差异,这是在macOS SwiftUI应用程序中,而不是iOS中的应用程序。
编辑:正如评论中所指出的,我尝试了这种方法Dynamic row hight containing TextEditor inside a List in SwiftUI,但它似乎无法正常工作-行仍然无法正确展开。
答案 0 :(得分:0)
为解决此问题,我最终使用.fixedSize(horizontal: false, vertical: true)
修饰符将TextEditor
固定为完整大小,然后使Dynamic row hight containing TextEditor inside a List in SwiftUI中的解决方案可以在列表中按预期工作
答案 1 :(得分:0)
SwiftUI-Introspect 库最近添加了对 TextEditor
的支持。您可以使用它来查找 TextEditor
使用的底层文本视图,并禁用该视图的滚动:
TextEditor(text: $item.text)
.introspectTextView { textView in
textView.isScrollEnabled = false
}
答案 2 :(得分:0)
我的应用有类似的功能,但它是 iOS 的,
需要导入 SwiftUI-Introspect。
预览
示例场景:
TextEditor
添加到 ScrollView
或 List
。TextEditor
的高度等于
内容的高度。TextEditor
的滚动手势(处理滚动
同时发出)。最小示例代码:
import Introspect
struct ExampleView: View {
@State var note: String = ""
var body: some View {
ScrollView {
// TextEditor
ZStack(alignment: .topLeading) {
// Provide size
HStack(spacing: 0) {
Text(note)
.foregroundColor(.blue)
.padding(.leading, .em_view_space_5)
Spacer()
}
// Wrapped with GeometryReader: let TextEditor' height equal to content's height when deleting text.
GeometryReader { proxy in
TextEditor(text: $note).introspectTextView { textView in
textView.isScrollEnabled = false
}
}
}
// Add extra views if you want
ForEach(0..<10) { index in
Text("\(index)")
}
}
}
}