#swiftui
#swiftui
Вопрос:
У меня есть этот код
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())
Я хочу, чтобы
GeometryReader должен появиться в верхней части VStack, однако то, что я получаю, это:
Где синяя линия — это верхняя часть VStack, а оранжевая — программа чтения геометрии. Я попытался добавить Spacer() после GeometryReader, но это не сработало. Как я могу убрать этот интервал?
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]))
}
}
Комментарии:
1. Я предполагаю, что это заголовок NavigationView. Не могли бы вы показать полный код просмотра?
2. @Asperi Я добавил навигационный просмотр и модификатор.
Ответ №1:
Просто удалите избыточное заполнение в NavBarModifier
func body(content: Content) -> some View {
return content
.zIndex(0)
.animation(.spring())
// .padding(.top,80) // << this one !!
Ответ №2:
Вам нужно добавить разделитель после GeometryReader для его размещения в верхней части VStack
, а также добавить .edgesIgnoringSafeArea(.top)
, чтобы он игнорировал это пустое пространство (безопасную область) и выровнял его в верхней части VStack
.
VStack {
GeometryReader{ geometry in
VStack {
Text("s")
}
.frame(width:geometry.size.width)
.background(Color.orange)
Spacer()
}
.edgesIgnoringSafeArea(.top)
Spacer()
}