斯威夫特:如何正确旋转的UITableViewController和UIViewController中,并在纵向模式

斯威夫特:如何正确旋转的UITableViewController和UIViewController中,并在纵向模式

问题描述:

在我的iOS应用程序,我想有些控制器只有.Portrait模式和moreore我想他们在.Portrait模式从允许在.Landscape控制器来时旋转模式。我认为,实现这些.Portrait仅视图控制器下面的方法是正确的做法:斯威夫特:如何正确旋转的UITableViewController和UIViewController中,并在纵向模式

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

} 

但无论如何,结果我得到的是不正确的。例如,下面是一个.Portrait只有UITableViewControllerviewWillAppear()被调用,而不是这个

enter image description here

我反而得到以下

enter image description here

这也恰好与UIViewController和。这就像视图(或表视图)没有旋转,并保持在.Landscape模式。我错过了什么?

你玩过自动布局吗?当我设置领先优势时,一切顺利。

另一种解决方案可以手动重新计算的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) 
} 

UPDATE

我测试了我先前的溶液中这是行不通的,但我发现另一种方式。其实你需要旋转它,并调用viewWillAppear中一个更多的时间 - 它为我工作,试试这个:

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

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

我测试它像这样:

  1. 我在应用程序,

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

  3. 它很好地旋转没有你的问题,当我再做一次问题显示。但是,当我点击另一个标签栏项目并回来时,一切正常 - 我认为我们应该调用某种方法,但我仍然不知道哪一个。

+0

是的,我用Auto-Layout并设置了很多约束条件。那么,我应该执行你写的方法吗? –

+0

对不起,我恐怕我还没有明白... –

+0

给我一秒我会测试这个想法,我告诉你,如果我是对的 – rudald