【问题标题】:How to know current interfaceOrientation in extension of iOS 8?如何在 iOS 8 的扩展中知道当前的 interfaceOrientation?
【发布时间】:2014-09-30 12:16:44
【问题描述】:

UIViewController 的InterfaceOrientation 已弃用,文档建议使用[[UIApplication sharedApplication] statusBarOrientation],但iOS 8 的扩展中没有sharedApplication。


正如@Retro 提到的,在大多数情况下,您可以在 UIViewController 中使用self.traitCollection.verticalSizeClassself.traitCollection.horizontalSizeClass 来获取方向信息。

【问题讨论】:

    标签: ios ios8 ios-app-extension custom-keyboard


    【解决方案1】:

    UITraitCollection 对象提供有关 UIViewController 对象特征的详细信息,该对象管理构成应用程序界面一部分的一组视图。这些特性或特征定义了视图控制器的大小类、显示比例和设备惯用语。创建视图控制器时,会自动为该视图控制器创建一个特征集合。

    您可以创建和修改视图控制器的特征集合来自定义您的应用。以下方法创建一个仅包含传递参数的新特征集合:

    traitCollectionWithDisplayScale:
    
    traitCollectionWithUserInterfaceIdiom:
    
    traitCollectionWithHorizontalSizeClass:
    
    traitCollectionWithVerticalSizeClass:
    

    【讨论】:

    • 不幸的是,特征集合不包括方向。为什么 Apple 推荐它作为 [UIViewController interfaceOrientation] 的合适替代品,我无法理解。
    • 这个想法是,您不应该再过多地考虑“方向”,而应该考虑大小类。您的界面需要具有适应性,尤其是考虑到新的 iOS9 多任务视图,并且设备的方向并不能准确判断您的布局在给定点的外观。
    • 这对于像 AVFoundation 这样的情况是不够的,因为方向在解析来自相机的数据时会有所不同
    【解决方案2】:

    未弃用,适用于任何屏幕尺寸的设备(包括 Apple 将于今年发布的未来屏幕尺寸)。

    -(void)viewDidLayoutSubviews {
        NSLog(@"%@", self.view.frame.size.width == fminf([[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height) ? @"Portrait" : @"Landscape");
    }
    

    感谢 @anneblue 帮助缩短代码!

    【讨论】:

    • 当您的解决方案将屏幕的较小尺寸与视图的宽度进行比较时,我将其简化为:self.view.frame.size.width == fminf([[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height) ? @"Portrait" : @"Landscape"
    • @anneblue 太好了!谢谢。我还没有时间测试它,(我确定它有效),如果你已经有,请随时将其编辑到我的答案中!
    • @anneblue 我会编辑它,很抱歉你的编辑被其他成员拒绝了。
    • 我期待着有一天,Apple 会跟随 NEC 的步伐,制造出 1:1 纵横比的 iOS 设备
    【解决方案3】:

    您可以将屏幕边界转换为键盘视图的坐标系。之后你可以检查什么是更大的宽度或高度。

    【讨论】:

      【解决方案4】:

      简单 - 只需使用:

      [[UIApplication sharedApplication] statusBarOrientation]

      【讨论】:

      • 嗯,这实际上只适用于应用程序。一旦你想在 Safari Extension 或类似中读取方向,最好使用 [[UIDevice currentDevice]orientation] – stackoverflow.com/questions/7968451/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多