SwifUI LandScape NavigationTopBar не скроет
Мне нужен был только один пейзажный вид между всеми видами, поэтому я добавил код ниже в AppDelegate
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window:
UIWindow?) -> UIInterfaceOrientationMask {
return AppDelegate.orientationLock
}
и я создал настраиваемый модификатор, как показано ниже, чтобы заставить конкретный вид быть в ландшафтном режиме
struct LandScapeOrientation: ViewModifier {
func body(content: Content) -> some View {
content
.onAppear {
AppDelegate.orientationLock = UIInterfaceOrientationMask.landscapeLeft
UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
}
.onDisappear {
DispatchQueue.main.async {
AppDelegate.orientationLock = UIInterfaceOrientationMask.portrait
UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
}
}
}}
extension View {
func landScape() -> some View{
self.modifier(LandScapeOrientation())
}
}
и вид, который я создал, выглядит как показано ниже:
struct GameplayScene: View {
//MARK: - Var
@State var round = NeverMindRound.first
@Binding var mode: NevermindMode
//MARK: - Views
private var background: some View {
colors.customYellowOk.value
.edgesIgnoringSafeArea(.all)
}
//MARK: - MainBody
var body: some View {
return ZStack{
background
RoundIntro(round: $round)
.landScape()
.navigationBarHidden(true)
.navigationBarBackButtonHidden(true)
.statusBar(hidden: true)
}.navigationBarHidden(true)
.navigationBarBackButtonHidden(true)
.statusBar(hidden: true)
}}
поэтому проблема в том, что после отображения этого представления в ландшафтном режиме появится панель навигации, и я не могу ее скрыть, хотя я указал, что она должна быть скрыта..
и вот вид rounIntro, который GamePlay представляет
struct RoundIntro: View {
//MARK: - Vars
@Binding var round: NeverMindRound
//MARK: - View
private var roundTitle: some View {
var shadow = colors.round1TitleShadow.value
var roundTitle = "Round 1"
switch round {
case .first:
roundTitle = "Round 1"
shadow = colors.round1TitleShadow.value
case .second:
roundTitle = "Round 2"
shadow = colors.round2TitleShadow.value
case .third:
roundTitle = "Round 3"
shadow = colors.round3TitleShadow.value
}
return Text(roundTitle)
.font(rubik.black.with(Size: 118))
.foregroundColor(.white)
.shadow(color: shadow, radius: 6, x: -7, y: 7)
}
//MARK: - MainBody
var body: some View {
roundTitle
.landScape()
}
}
и еще одна вещь - после нажатия кнопки возврата на панели навигации это не приведет к возврату изображения в портретный режим. вот картинки из ситуации:
1 ответ
Вы установили панель навигации для
struct RoundIntro: View {
Но что вы должны установить свойство hidden = true для соответствующей панели навигации UIViewController