【问题标题】:How would I add a new ViewController if and only if the screen is rotated into landscape mode in swift当且仅当屏幕快速旋转到横向模式时,我将如何添加新的 ViewController
【发布时间】:2020-06-02 14:48:50
【问题描述】:

我正在快速开始第一个项目,当屏幕以横向模式旋转时,我需要添加一个新的 ViewController。如果旋转回纵向模式,它将返回原始屏幕。我是swift的初学者,所以请尽可能清楚地解释。提前谢谢!

【问题讨论】:

  • 您能否添加更多信息,它将以哪些方式改变?应该出现额外的窗口,还是应该替换原来的 ViewController?我们在谈论什么设备?谢谢)
  • 所以可以说在纵向模式下我只有一个容器视图,但是当用户将设备旋转到横向时,一个额外的容器视图将被添加到横向模式。当用户旋转回纵向时,它会返回到一个容器视图。
  • 您可以使用大小类。

标签: ios swift xcode uiviewcontroller applet


【解决方案1】:

试试这个

第一个视图控制器

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {


override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    if UIDevice.current.orientation.isLandscape {
        print("Landscape")
        let vc2 = self.storyboard?.instantiateViewController(withIdentifier: "ViewController2")
        self.navigationController?.pushViewController(vc2!, animated: false)
    } else {
        print("Portrait")
    }
}
override func viewDidAppear(_ animated: Bool) {
    let value = UIInterfaceOrientation.portrait.rawValue
    UIDevice.current.setValue(value, forKey: "orientation")
}
override func viewDidLoad() {
    super.viewDidLoad()
}
}

第二个视图控制器

class ViewController2: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    if UIDevice.current.orientation.isLandscape {
        print("Landscape")
    } else {
        print("Portrait")
        self.navigationController?.popViewController(animated: false)
    }
}
}

你会在 viewWillTransition 方法中检测到方向变化,所以你需要重写它

【讨论】:

    【解决方案2】:

    看来你一定要看看SplitViewControllers。它允许您(对于 iPad 和 iPhone Plus)具有同时具有两个视图的分屏(对于其他设备,它就像导航控制器)。

    下面是我刚刚做的虚拟 SplitView 的几张截图

    这是横向模式

    这是纵向模式

    您还可以通过跟踪设备的orientation 或手势使其可折叠。默认情况下,您可以通过左右滑动手势显示或折叠详细视图。

    Here你可以在SplitViewController上查看一个不错的教程

    祝你好运!

    【讨论】:

    • 所以我尝试使用 splitview 但它无法让它工作,因为我需要的不仅仅是主视图表的表。无论如何要向主视图添加多个表格吗?
    • @Joe 你所说的不仅仅是一个 TableView 是什么意思?您需要有一个 TableView 作为主控吗?
    • 因此,如果您在链接中查看下面的图片。所以我的目标是在根控制器视图的左侧添加一个日历。右侧是绘图板。用户将能够将图纸保存到每个日期。如何让 splitview 让我导入一个不仅仅是普通表格视图的日历。i.stack.imgur.com/7APst.jpg
    • 似乎swift中没有特殊的日历视图(如果你想要一个,你可能需要创建它),所以在我看来你需要从细节替换你的TableViewController和而是放置一个自定义日历(可能在 ScrollView 中完成)
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 2013-08-29
    相关资源
    最近更新 更多