iPad方向以编程方式不起作用
Posted
技术标签:
【中文标题】iPad方向以编程方式不起作用【英文标题】:iPad orientation programmatically not working 【发布时间】:2020-06-11 20:33:36 【问题描述】:我对 iPad 上的方向有疑问。
我在 iPhone 上禁用了方向,但我可以在某些特定控制器上以编程方式更改它。
但在 iPad 上我不能。我不知道为什么,尽管我在这个网站上进行了搜索,一些开发人员写了答案来检查UIRequiresFullScreene
,我做到了。
但它会禁用所有屏幕上的方向。
有什么方法可以改变 iPad 上特定控制器的方向吗?
以下代码我用来更改 iPad 方向,但它不起作用。
UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
提前感谢
【问题讨论】:
这能回答你的问题吗? Force landscape mode in one ViewController using Swift 【参考方案1】:当您以编程方式设置设备的方向时。执行方向动画功能
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
正在调用来自AppDelegate
。
如果您将其设置为仅返回 UIInterfaceOrientationMask.portrait
,您将永远看不到转换。
我个人也有这类问题,为了解决这个问题,我必须以编程方式强制手机旋转到当前方向,然后再旋转到想要的方向。
手机从纵向旋转横向的示例
func setOrientationToLandScapeOnly()
appDelegate.shouldForceLandscapeOnly = true
appDelegate.shouldForcePortraitOnly = false
if UIDevice.current.userInterfaceIdiom == .phone
switch UIApplication.shared.statusBarOrientation
case .landscapeLeft, .landscapeRight:
return
default:
APIOrientationHandler.shared.setDeviceValueForOrientation(UIInterfaceOrientation.portrait.rawValue)
APIOrientationHandler.shared.setDeviceValueForOrientation(UIInterfaceOrientation.landscapeLeft.rawValue)
return
在AppDelegate.swift
里面
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
if shouldForcePortraitOnly
return UIInterfaceOrientationMask.portrait
if shouldForceLandscapeOnly
return UIInterfaceOrientationMask.landscape
if (UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad)
return UIInterfaceOrientationMask.landscape
return UIInterfaceOrientationMask.portrait
【讨论】:
你说得对,谢谢,但还必须从项目设置中取消选中横向,只检查纵向以上是关于iPad方向以编程方式不起作用的主要内容,如果未能解决你的问题,请参考以下文章
ios UIViewController以编程方式定位按钮不起作用
以编程方式从 CollectionView 单元推送 viewController 不起作用 - swift