Вы можете попробовать трюки с «оверлеем» и «фоном», когда вам нужно заставить их рендериться за несколько проходов. В приведенном выше случае наложение не будет зависеть от тени или других эффектов.
Если вы думаете, что они являются подвидами, на самом деле они просто визуализируются после суперпросмотра. Это 2D мир. Так что оверлей будет совершенно независимо.
Единственная проблема - только размер оверлея.
Скрытый () используется здесь, чтобы занять позицию невидимого наложения. Это очень круто, если вы овладеете этими навыками верстки.
struct ContentView: View {
var body: some View {
HStack {
SubContentView().hidden()
}
.padding(8)
.background(Color.white)
.shadow(color: Color.red, radius: 0, x: 0.0, y: -0.5)
.shadow(color: Color.red, radius: 0, x: 0.0, y: 0.5)
.overlay(SubContentView())
}
}
struct SubContentView: View {
var body: some View {
HStack{
Text("a")
Text("b")
Text("c")
Text("a")
Text("b")
Text("c")
}.padding(.leading, 12.0)
.padding(.trailing, 4.0)
.padding(.vertical, 16.0)
.background(Color.green)
.cornerRadius(10)
}
}