Устраните форму кнопки навигационной ссылки в режиме специальных возможностей

#swift #swiftui #accessibility #swiftui-navigationlink

Вопрос:

У меня есть небольшой проект SwiftUI, который поддерживает «Формы кнопок» в режиме специальных возможностей.
Формы кнопок в режиме специальных возможностей
Но я обнаружил, что когда я включаю этот режим, в центре экрана появляется небольшой белый прямоугольник, который, я думаю, является навигационной ссылкой, которую я поставил для secondView.
Вот мой код:

 struct FirstView: View {  @State private var activeSecondView = false  var body: some View {  NavigationView {  VStack {  Text("FirstView")  Button("Tap to show second view") {  self.activeSecondView = true  }  }  .overlay(NavigationLink(destination: Text("SecondView"), isActive: $activeSecondView) {EmptyView()})  }  } }  

И он работает так(избыточный прямоугольник обведен красным): Дополнительная съемная зона в центре

Есть ли какой-либо способ устранить или скрыть этот маленький белый прямоугольник, пока включена функция «Формы кнопок»?

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

1. Попробуйте поместить ссылку в фоновый режим вместо наложения.

2. Я попробовал, но все равно не получилось.

Ответ №1:

Попробуйте следующий (не проверено, просто идея)

 .background(  NavigationLink(destination: Text("SecondView"), isActive: $activeSecondView)   {EmptyView()}.opacity(0) // lt;lt; this !! )  

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

1. Ух ты, да это работает! И это проще, чем использовать ZStack. Спасибо!

Ответ №2:

Просто нашел решение сам, не уверен, что это лучшая практика. В любом случае я поделюсь им на случай, если кто-то столкнется с подобной проблемой.
просто спрячьте навигационную ссылку за основным контентом, и она станет невидимой:

 struct FirstView: View {  @State private var activeSecondView = false  var body: some View {  NavigationView {  ZStack {  NavigationLink(destination: Text("SecondView"), isActive: $activeSecondView) {EmptyView()}  Color.white  VStack {  Text("FirstView")  Button("Tap to show second view") {  self.activeSecondView = true  }  }  }  //.background(NavigationLink(destination: Text("SecondView"), isActive: $activeSecondView) {EmptyView()})  }  } }