gpt4 book ai didi

ios - 当主视图 Controller 是 UITabBarController 时,自适应显示细节 segue 转换为模态而不是在 iPhone 上推送

转载 作者:IT王子 更新时间:2023-10-29 08:20:33 25 4
gpt4 key购买 nike

在 XCode 6 中,如果您基于主从应用程序模板创建一个新项目,您将获得一个应该适用于所有设备的通用 Storyboard。

在主视图中选择一个单元格时,详细 View 会通过自适应“显示详细信息”转场进行更新。在纵向的 iPhone 4、5、6 或 6+ 上,此 segue 将按预期采用推送的形式。在横向的 iPad 或 iPhone 6+ 上,它会导致详细 View 按预期更新。

现在,如果您插入一个 UITabBarController 作为主视图 Controller ,它有一个到原始主视图 Controller 的选项卡,当在主视图中选择一个单元格时发生的自适应转场在 iPhone 上不会像预期的那样运行。您现在获得的不是推送转换,而是模态转换。我该如何解决?默认情况下不支持这似乎很奇怪。

我发现以下帖子很有用:iOS8 TabbarController inside a UISplitviewController Master但是,当使用建议的方法时,当我在插入纵向后旋转到横向时,我在 iPhone 6 Plus 上没有得到正确的行为。详细 View 的内容出现在主视图中,这并不奇怪,因为这是建议的解决方案所做的。

谢谢!

最佳答案

重新观看 WWDC14 的视频,我想我找到了更好的答案。

  1. 使用自定义 UISplitViewController(子类)
  2. 覆盖 showDetailViewController 操作
  3. 使用 traitCollection 来确定 UISplitViewController 的类
  4. 如果水平类是Compact,让navigationController调用showViewController

这是自定义 UISplitViewController 的代码:

import UIKit

class CustomSplitViewController: UISplitViewController {

override func showDetailViewController(vc: UIViewController!, sender: AnyObject!) {

if (self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClass.Compact) {
if let tabBarController = self.viewControllers[0] as? UITabBarController {
if let navigationController = tabBarController.selectedViewController as? UINavigationController {
navigationController.showViewController(vc, sender: sender)
return
}
}
}

super.showDetailViewController(vc, sender: sender)
}
}

不要忘记在 Storyboard中设置自定义类。

在 iPhone 6、iPhone 6+ 和 iPad Air 的模拟器中测试,按预期运行。

关于ios - 当主视图 Controller 是 UITabBarController 时,自适应显示细节 segue 转换为模态而不是在 iPhone 上推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26205838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com