【问题标题】:Don't collapse UISplitViewController in horizontally compact environment不要在水平紧凑的环境中折叠 UISplitViewController
【发布时间】:2015-12-15 21:21:15
【问题描述】:

UISplitViewController 的默认行为是,当它从水平规则环境转换为水平紧凑环境时,它会折叠。 是否有可能以某种方式覆盖它?

由于某些设计解决方案,我希望始终扩展 splitView。 我在UISplitViewController 的文档中没有找到解决方案:collapsed 属性是只读的,委托方法仅用于“如何折叠”,而不是“根本不折叠”。我正在使用 iOS9 SDK。

【问题讨论】:

    标签: ios iphone ipad cocoa-touch uisplitviewcontroller


    【解决方案1】:

    我想通了。 文档状态:

    拆分视图控制器决定其子视图的排列 基于可用空间的控制器。在水平规则 环境中,拆分视图控制器呈现其视图控制器 尽可能并排。在水平紧凑的环境中, 拆分视图控制器更像导航控制器, 最初显示主视图控制器并推送或 根据需要弹出辅助视图控制器。

    因此 splitView 在 Compact 水平环境中将始终折叠并在 Regular 中展开。解决的办法是在我们想要展开的时候告诉splitView它有Regular水平环境。这个想法来自WWDC 2014 Video“使用 UIKit 构建自适应应用程序”。不幸的是,他们在视频中提到的sample code 并未涵盖这种情况。但我们的想法是为 SplitViewController 创建包含 ViewController,我们可以在其中使用方法 setOverrideTraitCollection:forChildViewController: 覆盖 SplitViewController 的 trait 集合@

    @implementation ContainingViewController
    
    - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nil bundle:nil];
        if (self)
        {
            _splitViewController = [[UISplitViewController alloc] initWithNibName:nil bundle:nil];
            _splitViewController.viewControllers = <view controllers>;
    
            [self addChildViewController:_splitViewController];
            [self.view addSubview:_splitViewController.view];
    
            UITraitCollection *horizontallyRegularTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
            [self setOverrideTraitCollection:horizontallyRegularTraitCollection forChildViewController:_splitViewController];
        }
        return self;
    }
    

    使用此代码,SplitViewController 将始终具有常规水平特征集合,从而扩展。

    【讨论】:

      猜你喜欢
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      相关资源
      最近更新 更多