Swift:如何在纵向模式下正确旋转UITableViewController和UIViewController

时间:2016-03-31 12:45:46

标签: ios swift uitableview uiviewcontroller autorotate

在我的iOS应用中,我希望某些控制器仅具有.Portrait模式,而且我希望它们在来自允许处于.Portrait模式的控制器时以.Landscape模式旋转。我认为在这些仅.Portrait视图控制器中实现以下方法是正确的方法:

override func viewWillAppear(animated: Bool) {
    self.automaticallyAdjustsScrollViewInsets = true
    super.viewWillAppear(animated)
    let value = UIInterfaceOrientation.Portrait.rawValue
    UIDevice.currentDevice().setValue(value, forKey: "orientation")

}

无论如何,我得到的结果是不正确的。例如,以下内容仅为.Portrait UITableViewController,并且在调用viewWillAppear()时,而不是此

enter image description here

我改为获得以下

enter image description here

UIViewController也会发生这种情况。这就像视图(或表格视图)没有旋转并保持在.Landscape模式。我错过了什么?

1 个答案:

答案 0 :(得分:0)

你玩自动布局吗?当我设置前缘时,后缘一切都正常。

另一种解决方案是手动重新计算textView:

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
    textView.frame = CGRect(x: textView.frame.minY, y: textView.frame.minX, width: textView.frame.height, height: textView.frame.width)
}

<强>更新

我测试了我之前的解决方案并且它不起作用,但我找到了另一种方法。实际上你需要旋转它并再次调用viewWillAppear - 它对我有用,试试这个:

if orientation.isLandscape{
   let value = UIInterfaceOrientation.Portrait.rawValue
   UIDevice.currentDevice().setValue(value, forKey: "orientation")
   viewWillAppear(false)
}

不 - 它并不适用于所有情况......

我正在测试它:

  1. 我在app中,

  2. 移动旋转到横向,在标签栏项目中(未检查方向)。之后,我点击标签栏项目,我检查方向,然后旋转)

  3. 它可以很好地旋转而不会出现问题,而且当我再次执行此问题时,问题会显示出来。但是,当我点击另一个标签栏项目然后回来时,一切都正常 - 我认为我们应该调用一些方法,我仍然不知道哪一个。