我试图在横向模式下强制应用程序中只有一个视图,我调用:
override func shouldAutorotate() -> Bool {
print("shouldAutorotate")
return false
}
override func supportedInterfaceOrientations() -> Int {
print("supportedInterfaceOrientations")
return Int(UIInterfaceOrientationMask.LandscapeLeft.rawValue)
}
override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
return UIInterfaceOrientation.LandscapeLeft
}
视图以纵向模式启动,并在更改设备方向时保持旋转。永远不会调用shouldAutorotate()方法。
任何帮助都将不胜感激。
Swift 4,在iOS 11中测试
您可以在项目目标中指定方向-
AppDelegate
var myOrientation: UIInterfaceOrientationMask = .portrait
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return myOrientation
}
LandScpaeViewController
override func viewDidLoad() {
super.viewDidLoad()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.myOrientation = .landscape
}
点击按钮
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.myOrientation = .portrait
就是这样。:)
override func viewDidLoad() {
super.viewDidLoad()
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .landscapeLeft
}
override var shouldAutorotate: Bool {
return true
}
如果您的视图嵌入到导航控制器中,那么仅上述操作是行不通的。您必须在类定义之后通过以下扩展进行级联。
extension UINavigationController {
override open var shouldAutorotate: Bool {
get {
if let visibleVC = visibleViewController {
return visibleVC.shouldAutorotate
}
return super.shouldAutorotate
}
}
override open var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation{
get {
if let visibleVC = visibleViewController {
return visibleVC.preferredInterfaceOrientationForPresentation
}
return super.preferredInterfaceOrientationForPresentation
}
}
override open var supportedInterfaceOrientations: UIInterfaceOrientationMask{
get {
if let visibleVC = visibleViewController {
return visibleVC.supportedInterfaceOrientations
}
return super.supportedInterfaceOrientations
}
}}
override func viewDidLoad() {
super.viewDidLoad()
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
}
private func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.landscapeLeft
}
private func shouldAutorotate() -> Bool {
return true
}
这可能对其他人有用,我找到了一种强制以横向模式启动视图的方法:
把这个放在viewddLoad()中:
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
和
override var shouldAutorotate: Bool {
return true
}
问题内容: 我试图在横向模式下仅强制应用程序中的一个视图, 该视图以纵向模式启动,并且在更改设备方向时保持旋转。 从不调用shouldAutorotate。 任何帮助,将不胜感激。 问题答案: 它对其他人可能有用,我找到了一种强制视图以横向模式启动的方法: 把它放在viewDidLoad()中: 和,
我在纵向模式下有十多个ViewController,但无论设备的方向如何,我都需要在横向模式下强制一个ViewController。
问题内容: 我试图对我的应用程序强制使用“横向”模式,因为我的应用程序绝对不是针对“人像”模式设计的。我怎样才能做到这一点? 问题答案: 现在可以使用HTML5 Webapp清单。 见下文。 原始答案: 您不能将网站或Web应用程序锁定在特定方向。它违反了设备的自然行为。 您可以使用CSS3媒体查询来 检测 设备方向,如下所示: 或通过绑定JavaScript方向更改事件,如下所示: 2014年1
问题内容: 我有以下内容: 我如何从另一个ViewController 访问? 我需要访问此功能: 问题答案: 默认情况下,swift中的所有内容都是公开的,因此,如果您声明以下内容: 只要拥有它的实例,就可以访问它:
问题内容: 问题 我开始浏览上的新功能,并尝试了一些演示项目和教程。现在我被困在: 实例化,然后呈现特定情节提要中的 Objective-C解决方案 如何在Swift上实现这一目标? 问题答案: 这个答案最近针对Swift 5.2和iOS 13.4 SDK进行了修订。 这都是新语法和稍微修改的API的问题。UIKit的基本功能没有改变。对于绝大多数iOS SDK框架来说都是如此。 如果您遇到问题,
好的,我有一个视图控制器,它是一个AVPlayer。我希望这个控制器能够旋转到横向模式并自由肖像 当我关闭屏幕时,我仍然需要以前的控制器处于纵向。这应该不是问题,因为竖屏被锁定为我设置中的唯一方向,我想保持这种状态。但是我希望这个屏幕能够自由移动。任何想法和提示都将不胜感激。 app delegate方法对我无效。重写也不应在函数中自动旋转或支持InterfaceOrientations