Добавление ZStack вокруг представления вкладок/представления навигации перемещает содержимое в безопасную область при использовании .размытие

#ios #swiftui #navigationview #tabview #zstack

#iOS #свифтуи #вид навигации #вид вкладок #zstack

Вопрос:

Мое приложение использует a TabView , и в нем есть a NavigationView , поэтому я могу переходить к различным представлениям на выбранных вкладках. Я использую .navigationTitle вместе с .navigationBarTitleDisplayMode(.large) , чтобы показать пользователям, где они находятся (в приведенном ниже примере установлен заголовок "Pfizer" ). Все работает нормально, как вы можете видеть ниже:

Снимок экрана при использовании TabView/NavigationView без ZStack вокруг него

 var body: some View {  TabView(selection: $selectedTab) {  NavigationView {  ...  

Однако, как только я помещаю a ZStack вокруг TabView (или использую .overlay ) все представления, включая заголовок навигации, перемещаются в безопасную область, даже если я .ignoresSafeArea нигде не указал! Вот как это выглядит, когда я использую ZStack его:

Снимок экрана, когда все ZStack/TabView/NavigationView вложены

 var body: some View {  ZStack(alignment: .center) {  TabView(selection: $selectedTab) {  NavigationView {  ...  

Обратите внимание, что я намерен использовать ZStack для условного отображения представления поверх моего представления вкладок/навигации следующим образом:

 @Binding var condition: Bool   var body: some View {  ZStack(alignment: .center) {  TabView(selection: $selectedTab) {  NavigationView {  ...  }  }  .blur(radius: condition ? 3 : 0)  if condition {  VStack {  VStack(alignment: .center) {  Text("Some text")  .font(.title2).padding(.bottom)  }  .padding()  .background(Color(.secondarySystemBackground))  }  .padding(.horizontal, 40)  }  }  }  

Мне удалось методом проб и ошибок выяснить, что проблема возникает только в том случае, если я использую модификатор .blur представления TabView внутри ZStack . Если я удалю модификатор .blur представления, то проблема, которую я описал, не возникнет, и поэтому первоначальный комментарий Asperi имеет смысл.

Я не понимаю такого поведения и понятия не имею, почему использование .blur портит безопасную зону. Кто-нибудь может объяснить мне это поведение, пожалуйста?

Комментарии:

1. Отлично работает с Xcode 13.1 / iOS 15.1

2. Я подтвердил, что использую Xcode 13.1 / iOS 15.1, но все равно у меня есть эта проблема, как описано выше.

3. Методом проб и ошибок я выяснил, что проблема, которую я наблюдал, возникает только тогда, когда я использую модификатор .blur view. Вот причина, по которой Аспери не смог воспроизвести проблему. И все же я этого не понимаю.