SwiftUI 中的 TextEditor 定位

TextEditor positioning in SwiftUI

我添加了一个文本编辑器,但无法居中定位, 如图所示,文本编辑器已向右移动。 抱歉,我刚刚注意到整个页面向右移动了。 我不知道我做错了什么。你可以解决这个问题。 我想让它站在中间。

struct TextSend: View {
    
    @State private var inputText = ""
    
    var body: some View {
        GeometryReader { geometry in
            VStack {
                HStack {
                    Text("Picture")
                        .font(.system(size: 60))
                        .frame(width: geometry.size.width, height: geometry.size.height / 10)
                        .foregroundColor(.init(red: 45 / 255, green: 0 / 255, blue: 112 / 255))
                    Spacer().frame(height: geometry.size.height / 5)
                }

                VStack {
                    Text("Hi").frame(width: geometry.size.width, height: geometry.size.height / 10)
                }
                
                
                HStack {
                    ForEach(0 ..< 3) { _ in
                        CircleView()
                            .frame(width: geometry.size.width / 5, height: geometry.size.height / 10)
                            .shadow(radius: 10)
                    }
                }
                VStack {
                    
                TextEditor(text: $inputText) .frame(width: geometry.size.width, height:geometry.size.height / 3) .overlay(RoundedRectangle(cornerRadius: 30).stroke(Color.init( red: 45/255, green: 0/255, blue: 112/255), lineWidth: 1)).lineSpacing(10)
                    .autocapitalization(.words)
                    .disableAutocorrection(true)
                    .padding()
                }
                Spacer().frame(height: geometry.size.height / 15)
                VStack {
                    Button(action: {}, label: {
                        Text("Gönder")
                            .frame(width: geometry.size.width / 3, height: 50)
                            .padding(10)
                            .font(Font.system(size: 30, weight: .medium, design: .serif))
                            .foregroundColor(.white)
                            .background(RoundedRectangle(cornerRadius: 30))
                            .foregroundColor(.init(red: 45 / 255, green: 0 / 255, blue: 112 / 255))

                    })
                }
            }
        }
    }
}

从所有使用的地方删除 frame(width: geometry.size.width,因为这样的硬编码会破坏布局。尝试始终仅对可计算值使用 geometry

这里是固定部分(用Xcode 12.1 / iOS 14.1测试)

    HStack {
        Text("Picture")
            .font(.system(size: 60))
            .frame(height: geometry.size.height / 10)    // << !!
            .foregroundColor(.init(red: 45 / 255, green: 0 / 255, blue: 112 / 255))
        Spacer().frame(height: geometry.size.height / 5)
    }

    VStack {
        Text("Hi").frame(height: geometry.size.height / 10)   // << !!
    }
    
    
    // ... other code

    VStack {
        
    TextEditor(text: $inputText)
       .frame(height:geometry.size.height / 3)      // << !!
       .overlay(RoundedRectangle(cornerRadius: 30).stroke(Color.init( red: 45/255, green: 0/255, blue: 112/255), lineWidth: 1)).lineSpacing(10)
        .autocapitalization(.words)
        .disableAutocorrection(true)
        .padding()
    }

您需要将 frame 添加到 GeometryReader 中的第一个 child,在您的情况下 VStack

VStack{
}.frame(width:geometry.size.width , height: geometry.size.height)

ps:你可以做到:例如,geometry.size.width - 10,为了填充目的