iOS 8中已弃用InterfaceOrientation

9

我在项目中没有使用Size classes,并继续使用旧的视图控制器方向方法。当我使用如下代码时,会收到警告信息:

    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
      ...
    }

我已经搜索了很多,但是找不到正确的方法来修复它。有什么建议吗?

“修复”的方法是使用新的方法。你为什么不想这样做呢? - Aaron Brager
我在我的项目中没有使用尺寸类。这就是你的问题所在。与方向相关的信息通过traitCollection作为尺寸类向您传达。显然,如果您拒绝查看它,您将看不到它。 - matt
我该如何将UITraitCollection翻译成UIInterfaceOrientation?例如,哪个特征集表示横向左侧方向? - Deepak Sharma
3个回答

9

应该更改

if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
  ...
}

为了

if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation])) {
  ...
}

'statusBarOrientation' 在 iOS 13.0 中已过时 - https://dev59.com/O1MH5IYBdhLWcg3w10B_ - Vigneshwaran Murugesan

7
自从iOS8开始,苹果建议使用TraitCollections(大小类)代替interfaceOrientation。
此外,自从iOS 9和新的iPad功能“多任务处理”以来,有些情况下设备方向与窗口比例不匹配!(这会导致应用程序UI崩溃)
然而,有时TraitCollections不能满足您的所有设计需求。对于这些情况,苹果建议比较视图的bounds:
if view.bounds.size.width > view.bounds.size.height {
    // ...
}

我很惊讶,但你可以在WWDC 2015视频的21'15处进行检查。 在iOS 9中开始使用iPad上的多任务处理


但是我有一个问题,它无法区分横向左和横向右。我该怎么办? - Deepak Sharma
你说得没错@DeepakSharma,然而尺寸类别并不能区分横向左右。你为什么需要这个信息呢? 如果你需要的是设备方向而不是屏幕方向,可以使用[[UIApplication sharedApplication] statusBarOrientation] - vmeyer

0

你们中的一些人可能需要使用UIDevice Orientation

if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) {
   ...
}

使用状态栏方向代替

if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation])) {
   ...
}

  1. statusBarOrientation已经被弃用。
  2. 使用设备方向是错误的。例如,设备可能处于竖屏模式,但界面却是横屏模式。
- Cynichniy Bandera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接