我有一个List
,其中包含一个TextEditor
struct ContentView: View {
@State var text: String = "test"
var body: some View {
List((1...10), id: \.self) { _ in
TextEditor(text: $text)
}
}
}
但是随着TextEditor
的高度变化,它的项目没有增长。我尝试过.fixedSize()
修饰符没有任何运气。我在这里想念什么?
答案 0 :(得分:12)
您可以在Text
中使用不可见的ZStack
使其动态。
struct ContentView: View {
@State var text: String = "test"
var body: some View {
List((1...10), id: \.self) { _ in
ZStack {
TextEditor(text: $text)
Text(text).opacity(0).padding(.all, 8) // <- This will solve the issue if it is in the same ZStack
}
}
}
}
请注意,您应该考虑更改字体大小和其他属性以匹配TextEditor
答案 1 :(得分:2)
据我所见,视图层次结构TextEditor
只是UITextView
的简单包装,并且没有其他内容可以添加,因此您可以深入了解该层并找到所需的UIKit解决方案或...
以下是在SwiftUI级别处理它的可能方法的演示(其思想是使用Text
视图作为包装行为的参考,并对其进行TextEditor
的调整)
在Xcode 12b / iOS 14上进行了测试(添加了红色边框以提高可见度)
修改了您的视图:
struct ContentView: View {
@State var text: String = "test"
@State private var height: CGFloat = .zero
var body: some View {
List {
ForEach((1...10), id: \.self) { _ in
ZStack(alignment: .leading) {
Text(text).foregroundColor(.clear).padding(6)
.background(GeometryReader {
Color.clear.preference(key: ViewHeightKey.self, value: $0.frame(in: .local).size.height)
})
TextEditor(text: $text)
.frame(minHeight: height)
//.border(Color.red) // << for testing
}
.onPreferenceChange(ViewHeightKey.self) { height = $0 }
}
}
}
}
注意:ViewHeightKey
是一个首选项键,用于我的其他解决方案中,因此可以从那里获取
ForEach and GeometryReader: variable height for children?
How to make a SwiftUI List scroll automatically?
Automatically adjustable view height based on text height in SwiftUI