HStack 和 TextField 的角半径未更新

问题描述

这是我的内容视图的代码。如您所见,我已经尝试过使用 HStack 来包含 TextField,也尝试过单独使用 TextField。角半径与灰色搜索矩形没有任何关系 - 边缘仍然是完美的矩形。

    
    @State var searchText = ""
    var body: some View {
        ZStack {
            //function that's the content argument to ZStack
            Color((.systemGreen))
            vstack {
                Text("App")
                    .font(.largeTitle)
                    .foregroundColor(Color.white)
                //HStack {
                TextField("Searchstring",text: $searchText)
                    .padding()
                    .background(Color(.systemGray6))
                    .padding()
                    .cornerRadius(12)
                //}
//                .padding()
//                .background(Color(.systemGray6))
//                .padding(.horizontal)
//                .cornerRadius(12)
            }
        }
    }
}

这就是预览的样子,在所有情况下: corner radius fails to show in preview

解决方法

问题出在这里:

.padding() /// 1.
.background(Color(.systemGray6)) /// 2.
.padding() /// 3.
.cornerRadius(12) /// 4.
  1. 您的文本字段有一个 padding
  2. backgroundpadding
  3. 之后被应用
  4. padding 之后添加另一个 background
  5. 您在 cornerRadius 之上应用另一个 padding

因此,舍入的是 padding,而不是 background

Diagram showing transparent padding rounded

相反,您希望在 cornerRadius 之后立即应用 background

Diagram showing background rounded,then padding on outside

struct ContentView: View {
    @State var searchText = ""
    var body: some View {
        ZStack {
            //function that's the content argument to ZStack
            Color((.systemGreen))
            VStack {
                Text("App")
                    .font(.largeTitle)
                    .foregroundColor(Color.white)
                
                TextField("Searchstring",text: $searchText)
                    .padding()
                    .background(Color(.systemGray6))
                    .cornerRadius(12) /// corner radius immediately after the background
                    .padding() /// extra padding outside the background
            }
        }
    }
}

结果:

Background is rounded,then padding applied outside