拆分视图控制器偶尔会在 iOS 13 上的 iPhone 上显示详细视图

Posted

技术标签:

【中文标题】拆分视图控制器偶尔会在 iOS 13 上的 iPhone 上显示详细视图【英文标题】:Split View controller occasionally showing detail view on iPhone on iOS 13 【发布时间】:2019-11-12 05:04:25 【问题描述】:

我们有一个带有拆分视图控制器的通用应用程序,这些控制器嵌入在不同的选项卡中。我们在 iPhone 上的 ios 13 上观察到,在切换选项卡时,偶尔会显示详细视图而不是主视图。我们无法挑选出这种模式,这只是随机发生,但经常发生。

我已经提到了UISplitViewController in portrait on iPhone shows detail VC instead of master 和 Open UISplitViewController to Master View rather than Detail 我们正在为 SplitViewController 实现委托。该委托也被调用。


class AppSplitViewController: UISplitViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        self.delegate = self
        self.preferredDisplayMode = .allVisible
    

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    
    */



// MARK: - UISplitViewControllerDelegate Methods
extension AppSplitViewController: UISplitViewControllerDelegate 
    func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool 
        return true
    

我不确定其他人是否在 iOS 13 上也观察到了这一点,但我不确定为什么 iOS 会偶尔显示详细视图,即使我们有适当的委托实现。请注意,我们无法在 iOS 12 上重现这一点。这是视图堆栈 https://imgur.com/eWO3RQM

【问题讨论】:

即使在 iOS 15 上我仍然看到这种情况发生。也无法可靠地重现它。 @TylerJames 所以当应用程序进入后台时,我最终在应用程序委托中设置了标志,然后这样做 // 如果它只是 iPhone 并从后台导航,那么委托方法不会'没有被调用,我们必须手动弹出控制器 if userInterfaceIdiom != .pad, let isComingFromBackground = (UIApplication.shared.delegate as?AppDelegate)?.isComingFromBackground, isComingFromBackground, let nav = self.viewControllers.first as? UINavigationController nav.popToRootViewController(animated:false) 【参考方案1】:

awakeFromNib 中再次设置UISplitViewController delegate。从 iOS 13 到至少 13.3 似乎存在一些操作顺序问题。我遇到了完全相同的问题,并根据another answer 实现了这个提示,这似乎有效。

【讨论】:

以上是关于拆分视图控制器偶尔会在 iOS 13 上的 iPhone 上显示详细视图的主要内容,如果未能解决你的问题,请参考以下文章

自定义尺寸 iPad 拆分视图

最初打开 iOS13+ 应用程序后更新/更改根视图控制器

视图控制器容器偶尔会错过子控制器中的 viewWillAppear

自定义视图控制器转换偶尔崩溃

拆分视图控制器中的 iOS 静态页脚

设置拆分视图控制器 Xamarin.iOS