Кажется, что установка shadow
после того, как эффекты цвета / непрозрачности вызывают проблемы в этом конкретном сценарии.
Чтобы убедиться, что эффекты компоновки отрисовывают до тени, вы можете добавить .compositingGroup()
к вашему VStack
- прямо перед shadow
- и это решит проблему.
Документация говорит:
Группа компоновки создает эффекты компоновки в представлениях предков этого представления, такие как непрозрачность и режим наложения, вступают в силу до визуализации этого представления.
Измененный код :
VStack {
// [...]
}
.padding(12)
.background(Color.gray)
.compositingGroup() // THIS
.shadow(radius: 5)
.navigationBarTitle(Text("Sign Up"))
Таким образом, пользовательский интерфейс может быть еще более упрощен - он достигает того же результата.
struct ContentView: View {
@State var firstName = ""
@State var lastName = ""
var body: some View {
NavigationView {
VStack {
TextField($firstName, placeholder: Text("First Name"))
.padding(10)
.background(Color.white)
.cornerRadius(5)
.shadow(radius: 3)
TextField($lastName, placeholder: Text("Last Name"))
.padding(10)
.background(Color.white)
.cornerRadius(5)
.shadow(radius: 3)
Button(action: { }) {
Text("Create User")
.color(.white)
.padding(10)
.background(Color.blue)
.cornerRadius(5)
.shadow(radius: 5)
}
}
.padding(12)
.background(Color.gray)
.compositingGroup()
.shadow(radius: 5)
.navigationBarTitle(Text("Sign Up"))
}
}
}