gpt4 book ai didi

ios - 支持 Landscape Orientation 的 UiViewController 将其他 View 置于 Landscape

转载 作者:行者123 更新时间:2023-11-28 20:50:04 26 4
gpt4 key购买 nike

我现在搜索了一天,但没有找到合适的解决方案。我的应用程序由一个 Tab Bar Controller 和一个 Navigation Controllers 组成。我希望所有屏幕都只有纵向屏幕,但只有一个 subview 是横向的。

它可以到达那里,但是当我从物理上保持横向的 subview 返回时,父级也显示为横向,尽管我只允许 .portrait ind Controller 。

我已经做了:

extension UITabBarController {
override open var shouldAutorotate: Bool {
get {
if let visibleVC = selectedViewController {
return visibleVC.shouldAutorotate
}
return super.shouldAutorotate
}
}

override open var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation{
get {
if let visibleVC = selectedViewController {
return visibleVC.preferredInterfaceOrientationForPresentation
}
return super.preferredInterfaceOrientationForPresentation
}
}

override open var supportedInterfaceOrientations: UIInterfaceOrientationMask {
// your custom logic for rotation of selected tab
get {
if let visibleVC = selectedViewController {
return visibleVC.supportedInterfaceOrientations
}
return super.supportedInterfaceOrientations
}
}
}

extension UINavigationController {
override open var shouldAutorotate: Bool {
get {
if let visibleVC = visibleViewController {
return visibleVC.shouldAutorotate
}
return super.shouldAutorotate
}
}

override open var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation{
get {
if let visibleVC = visibleViewController {
return visibleVC.preferredInterfaceOrientationForPresentation
}
return super.preferredInterfaceOrientationForPresentation
}
}

override open var supportedInterfaceOrientations: UIInterfaceOrientationMask{
get {
if let visibleVC = visibleViewController {
return visibleVC.supportedInterfaceOrientations
}
return super.supportedInterfaceOrientations
}
}
}

在父 Controller 中:

  override var shouldAutorotate: Bool{
return true
}

override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation{
return .portrait
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask{
return .portrait
}

当我将设备转到纵向时, View 再次以纵向显示,但我希望即使我没有转动设备,也能在 child 横向离开后立即发生这种情况。

有什么想法吗?谢谢!

最佳答案

在你的横向 View Controller 中添加这段代码

override func viewDidLoad() {
super.viewDidLoad()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.myOrientation = .landscapeRight
}

和 ViewWillDisappear 添加这个

override func viewWillDisappear(_ animated: Bool) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.myOrientation = .portrait
UIView.setAnimationsEnabled(false)
UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
UIView.setAnimationsEnabled(true)
UIViewController.attemptRotationToDeviceOrientation()
UIView.setAnimationsEnabled(false)
}

在 appDeledate 添加这一行

var window: UIWindow?
var myOrientation: UIInterfaceOrientationMask = .portrait

关于ios - 支持 Landscape Orientation 的 UiViewController 将其他 View 置于 Landscape,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59054817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com