Ruang misterius SwiftUI di atas VStack
Aug 20 2020
Saya memiliki kode ini
NavigationView{
VStack{
GeometryReader{ geometry in
VStack{
Text("a")
}
.frame(width:geometry.size.width)
.background(Color.orange)
Spacer()
}
}
.modifier(NavBarModifier(font: self.fontUI,text: "Profile"))
}
.navigationViewStyle(StackNavigationViewStyle())
Saya ingin GeometryReader muncul di atas VStack, namun yang saya dapatkan adalah:

Dimana garis biru adalah bagian atas VStack dan oranye adalah GeometryReader. Saya mencoba menambahkan Spacer () setelah GeometryReader, tetapi tidak berhasil. Bagaimana cara menghapus spasi itu?
struct NavBarModifier: ViewModifier{
var font: UIFont
var text: String
func body(content: Content) -> some View {
return content
.zIndex(0)
.animation(.spring())
.padding(.top,80)
.navigationBarTitle(Text(self.text),displayMode: .inline)
.navigationBarHidden(false)
.foregroundColor(.orange)
.background(NavigationConfigurator { nc in
nc.navigationBar.barTintColor = UIColor(red: 243/255, green: 107/255, blue: 21/255, alpha: 1)
nc.navigationBar.titleTextAttributes = [
.foregroundColor : UIColor.white,
.font : self.font,
.kern: 1.2
]
}
.padding([.top, .leading, .trailing]))
}
}
Jawaban
1 Asperi Aug 20 2020 at 16:32
Hapus saja padding yang berlebihan NavBarModifier
func body(content: Content) -> some View {
return content
.zIndex(0)
.animation(.spring())
// .padding(.top,80) // << this one !!
ignalonzo Aug 20 2020 at 15:54
Anda perlu menambahkan Spacer setelah GeometryReader untuk itu ke layout di bagian atas VStack
dan juga menambahkannya .edgesIgnoringSafeArea(.top)
untuk mengabaikan ruang putih (area aman) dan membuatnya sejajar di bagian atas VStack
.
VStack {
GeometryReader{ geometry in
VStack {
Text("s")
}
.frame(width:geometry.size.width)
.background(Color.orange)
Spacer()
}
.edgesIgnoringSafeArea(.top)
Spacer()
}
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'