Заблокировать ориентацию вида только в альбомной ориентацииIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Заблокировать ориентацию вида только в альбомной ориентации

Сообщение Anonymous »

Я пытаюсь представить представление в альбомной ориентации из книжной, используя приведенный ниже код

Код: Выделить всё

   Button {
isLandscapeViewPresented.toggle()
} label: {
Text("Click for landscape view")
}.fullScreenCover(isPresented: $isLandscapeViewPresented) {
LandscapeOnlyView {
LandscapeView()
}
}
И в оболочке LandscapeOnlyView у меня есть, как показано ниже

Код: Выделить всё

struct LandscapeOnlyView: UIViewControllerRepresentable {

let content: Content

init(@ViewBuilder content: () -> Content) {
self.content = content()
}

func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) { }

func makeUIViewController(context: Context) -> some UIViewController {
return LandscapeHostingController(rootView: content)
}
}
Для LandscapeHostingController, который содержит корневое представление, как показано ниже:

Код: Выделить всё

class LandscapeHostingController: UIHostingController {

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .landscape
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
AppDelegate.orientationLock = .landscape
let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene
scene?.requestGeometryUpdate(.iOS(interfaceOrientations: .landscapeRight), errorHandler: { error in
print(error)
})
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)

AppDelegate.orientationLock = .portrait
let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene
scene?.requestGeometryUpdate(.iOS(interfaceOrientations: .portrait), errorHandler: { error in
print(error)
})
}
}
Я использую AppDelegate, как вы можете видеть, где я обновляю ориентацию Lock, с переопределением supportInterfaceOrientations, возвращающим обновленную ориентацию всякий раз, когда мне нужно изменить ориентацию.
Я получаю следующий результат.
Изображение
Мне нужно, чтобы LandscapeView находился в альбомной ориентации еще до представления, в отличие от того, что показано выше, где представление переключается на альбомное, поскольку обновление ориентации выполняется в viewWillAppear оболочки LandscapeHostingController для быстрого просмотра пользовательского интерфейса.Я пробовал много способов. Есть ли что-то неправильное в моем подходе, и его следует изменить?
Есть идеи, как этого добиться?

Подробнее здесь: https://stackoverflow.com/questions/792 ... -landscape
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»