iOS 14.4 + Xcode 12.4
我想在 iOS 上的 SwiftUI 中制作一个简单的清单,其中每个项目的文本都是TextEditor
.
首先,我创建了基本的应用程序结构并用一些演示内容填充它:
import SwiftUI
@main
struct TestApp: App {
@State var alpha = "Alpha"
@State var bravo = "Bravo is a really long one that should wrap to multiple lines."
@State var charlie = "Charlie"
init(){
//Remove the default background of the TextEditor/UITextView
UITextView.appearance().backgroundColor = .clear
}
var body: some Scene {
WindowGroup {
ScrollView{
VStack(spacing: 7){
TaskView(text: $alpha)
TaskView(text: $bravo)
TaskView(text: $charlie)
}
.padding(20)
}
.background(Color.gray)
}
}
}
然后每个TaskView
代表列表中的一个任务(白框):
struct TaskView:View{
@Binding var text:String
var body: some View{
HStack(alignment:.top, spacing:8){
Button(action: {
print("Test")
}){
Circle()
.strokeBorder(Color.gray,lineWidth: 1)
.background(Circle().foregroundColor(Color.white))
.frame(width:22, height: 22)
}
.buttonStyle(PlainButtonStyle())
FieldView(name: $text)
}
.frame(maxWidth: .infinity, alignment: .leading)
.padding(EdgeInsets(top:10, leading:10, bottom: 10, trailing: 30))
.background(Color.white)
.cornerRadius(5)
}
}
最后,每个TextEditor
s 都是FieldView
这样的:
struct FieldView: View{
@Binding var name: String
var body: some View{
ZStack{
Text(name)
.padding(EdgeInsets(top: -7, leading: -3, bottom: -5, trailing: -3))
.opacity(0)
TextEditor(text: $name)
.fixedSize(horizontal: false, vertical: true)
.padding(EdgeInsets(top: -7, leading: -3, bottom: -5, trailing: -3))
}
}
}
正如您在上面的屏幕截图中看到的,初始高度TextEditor
不会自动调整大小以适应文本。但是一旦我输入它,它就会适当地调整大小。这是一个视频,显示:
如何让视图具有正确的初始高度?在我输入之前,TextEditor
垂直滚动,所以它似乎有错误的内在内容大小。