斯威夫特:如何正确旋转的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
只有UITableViewController
时viewWillAppear()
被调用,而不是这个
我反而得到以下
这也恰好与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)
}
没有 - 它并不适用于所有情况......
我测试它像这样:
我在应用程序,
移动旋转为横向,在标签栏项目(其中未选中的方向)。之后,我点击标签栏项目,我检查方向,我旋转)
它很好地旋转没有你的问题,当我再做一次问题显示。但是,当我点击另一个标签栏项目并回来时,一切正常 - 我认为我们应该调用某种方法,但我仍然不知道哪一个。
是的,我用Auto-Layout并设置了很多约束条件。那么,我应该执行你写的方法吗? –
对不起,我恐怕我还没有明白... –
给我一秒我会测试这个想法,我告诉你,如果我是对的 – rudald