我想在iOS Swift中的常规高度特征环境中运行特定的viewcontroller

我想在iOS Swift中的常规高度特征环境中运行特定的viewcontroller,ios,swift,Ios,Swift,我的ios应用程序中有很多视图控制器,它们都支持旋转,但对于我的一个场景(而且只有一个),我想检测trait环境,并仅在设备trait环境为正常高度时运行它(例如,纵向的iPhone或纵向或横向的iPad)。如何做到这一点? 所以我想得到垂直尺寸类,并根据它冻结方向。因此,如果verticalSizeClass==.compact,UIViewController的视图方向应为纵向,否则UIViewController的视图方向可以与屏幕的方向相同。 我正在使用以下代码 override var

我的ios应用程序中有很多视图控制器,它们都支持旋转,但对于我的一个场景(而且只有一个),我想检测trait环境,并仅在设备trait环境为正常高度时运行它(例如,纵向的iPhone或纵向或横向的iPad)。如何做到这一点? 所以我想得到垂直尺寸类,并根据它冻结方向。因此,如果verticalSizeClass==.compact,UIViewController的视图方向应为纵向,否则UIViewController的视图方向可以与屏幕的方向相同。 我正在使用以下代码

override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    let tc = UIScreen.main.traitCollection
    let orientation: UIInterfaceOrientation = UIApplication.shared.statusBarOrientation

    if tc.verticalSizeClass == .compact {
        return .portrait
    } else {
        return orientation
    }

}
但它会为自动布局提供错误消息。我使用的是Xcode 10.2,运行的是Swift 5.0。 有一个问题
但这是从objective c的角度来看的,更重要的是,我希望viewController根据设备旋转,而“如何在iOS 8中强制查看控制器方向?”的问题将方向锁定为纵向或横向,而不关心横向左侧或右侧。

据我所知,您希望获得特定场景的高度 让屏幕大小:CGRect=UIScreen.main.bounds

    let screenWidth = screenSize.width
    let screenHeight = screenSize.height

    print("Screen width = \(screenWidth), screen height = \(screenHeight)")

这将为您提供高度和宽度。

您已正确使用大小类来检测特征环境。但请尝试替代UIViewController的此存储属性

override var supportedInterfaceOrientations: UIInterfaceOrientationMask{
get{
    if .compact == UIScreen.main.traitCollection.verticalSizeClass{
        return .portrait
    }
    return .all
}
}

当用户更改设备方向时,系统将调用 方法在根视图控制器或最上面显示的视图上 填充窗口的控制器。如果视图控制器支持 新方向时,窗口和视图控制器将旋转到新方向 方向。仅当视图控制器的 shouldAutorotate方法返回true


否,我要获取垂直尺寸等级,并根据该等级冻结方向。因此,如果verticalSizeClass=.compact,UIViewController视图的方向应该是纵向的,否则UIViewController视图的方向可以与screen的方向相同。如果(UIScreen.main.traitCollection.horizontalSizeClass==UIUserInterfaceSizeClass.compact){}否则{}如果需要检查垂直if(UIScreen.main.traitCollection.verticalSizeClass==UIUserInterfaceSizeClass.compact){}否则{}如果屏幕垂直紧凑,则需要强制执行纵向,如果不支持,则支持所有方向?@Sweeper这正是我想要的。可能重复@Aks我问的问题与常规高度环境略有不同,我希望viewController根据设备旋转,而问题“如何在iOS 8中强制查看控制器方向?”将方向锁定为纵向或横向,不关心横向左侧或右侧。iOS具有大小类,而不是用于自动布局的设备。所以这个答案也适用于你的情况。我们通过尺寸等级
确定紧凑、规则,任何设备都可以变化。iPad的多任务处理也可以改变这一点。