【问题标题】:UISplitViewController display master view above detail in portrait orientationUISplitViewController 在纵向显示细节上方的主视图
【发布时间】:2015-03-07 03:07:23
【问题描述】:

我在 UINavigationController 中嵌入了一个 UISplitViewController,它带有一个 UINavigationItem 按钮来切换主视图的纵向显示。当视图首次以纵向加载时,我想在详细视图上方显示主视图。

我发现的任何类似示例都显示了主视图和详细视图以纵向拆分屏幕,但我需要详细视图在纵向全屏显示,当 UISplitViewController 首次加载时,主视图覆盖详细视图(好像主视图已从左侧滑出)。有人知道怎么做吗?

【问题讨论】:

    标签: ios objective-c uisplitviewcontroller master-detail


    【解决方案1】:

    编辑:不是重复的。在 cmets 中发现了答案。解决方案是在 UISplitViewController 上使用preferredDisplayMode 并将其设置为UISplitViewControllerDisplayModePrimaryOverlay

    将上下文的原始答案留给 cmets 和后代。


    原答案

    这是一个副本:UISplitViewController in portrait on iPhone shows detail VC instead of master

    作为参考,这种情况下的解决方案是让实现 UISplitViewControllerDelegate 的视图控制器使用以下代码:

    - (BOOL)splitViewController:(UISplitViewController *)splitViewController
    collapseSecondaryViewController:(UIViewController *)secondaryViewController
      ontoPrimaryViewController:(UIViewController *)primaryViewController {
    
        if ([secondaryViewController isKindOfClass:[UINavigationController class]]
            && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]]
            && ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {
    
            // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
            return YES;
    
        } else {
    
            return NO;
    
        }
    }
    

    【讨论】:

    • 不是重复的,该解决方案用于显示主视图或详细视图。我正在寻找同时显示主视图和详细信息的答案,主视图覆盖了详细视图的一部分。你能给我指出一个不同的答案或发布一个新的解决方案吗?
    • 啊。我看错了。 UISplitViewController 上有一个preferredDisplayMode 属性。那样有用吗?不知道我脑子里想的是什么。
    • 它确实有效,您只需将其设置为等于 UISplitViewControllerDisplayModePrimaryOverlay.. 谢谢!
    【解决方案2】:

    您也可以使用:

        - (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController: (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {
    
        //  Force master view to show in portrait and landscape
    
        return NO;
    }
    

    【讨论】:

    • 这解决了我的问题。我发现带有 FaceID 的新型无按钮 iOS 设备与带有 TouchID 的传统按钮设备之间的默认行为是不同的。我将应用程序设计为并排使用拆分视图,而不是主视图重叠和弹出。您提供的这段代码将其修复为较旧的(和更好的恕我直言)并排样式。
    猜你喜欢
    • 2014-05-24
    • 2016-05-28
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多