在我的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()
时,而不是此
我改为获得以下
UIViewController
也会发生这种情况。这就像视图(或表格视图)没有旋转并保持在.Landscape
模式。我错过了什么?
答案 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)
}
不 - 它并不适用于所有情况......
我正在测试它:
我在app中,
移动旋转到横向,在标签栏项目中(未检查方向)。之后,我点击标签栏项目,我检查方向,然后旋转)
它可以很好地旋转而不会出现问题,而且当我再次执行此问题时,问题会显示出来。但是,当我点击另一个标签栏项目然后回来时,一切都正常 - 我认为我们应该调用一些方法,我仍然不知道哪一个。