转换后的视图控制器使其约束适合大小 class 而不是设备

View controller after transition is fitting its contraints to size class instead of device

首先,我遵循了本教程:https://www.youtube.com/watch?v=B9sH_VxPPo4 然后我在我工作的真实项目中使用了这个转换,但从那以后我就遇到了问题。一个我不太明白为什么会发生的问题。也许你能帮帮我。

发生的情况如下:我正在使用此转换为我的应用制作教程。在我为教程设置文本的视图控制器中,我将顶部、底部、前导和尾部的约束设置为 0。因此,它应该使视图控制器适合边缘,对吧?但这只会发生在我选择大小 class 与我在模拟器中使用的相同设备时。例如,我必须 运行 一个 iPhone 7 plus 模拟器并将大小 classe 设置为 iPhone 7 plus 才能正常工作。当我 运行 iPhone 7 的模拟器没有在界面生成器中更改任何内容时,它崩溃了。我意识到视图控制器不适合设备的边缘(模拟或物理),它适合尺寸 class 的边缘。我意识到,当我用“.transitioningDelegate = self and .modalPresentationStyle = .custom”评论这些行时,它可以正常工作(当然没有过渡)。我认为这可能是这种转变的问题。你能帮帮我吗?

下面是我用来使用此转换呈现视图控制器的代码片段:

let levelTutorial = CPQuizLevelTutorialViewController()
levelTutorial.transitioningDelegate = self
levelTutorial.modalPresentationStyle = .custom
self.present(levelTutorial, animated: true, completion: nil)

这是我实现 UIViewControllerTransitioningDelegate 的代码的另一部分:

extension CPMainQuizViewController: UIViewControllerTransitioningDelegate {

    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        transition.transitionMode = .dismiss
        transition.startingPoint = self.view.center
        transition.circleColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha:0.6)

        return transition
    }

    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        transition.transitionMode = .present
        transition.startingPoint = self.view.center
        transition.circleColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha:0.6)

        return transition
    }
}

我不知道它是否与错误有关,但我使用的是 xib 而不是 Storyboard。我确实知道与错误有关的一件事是我对 iOS 开发还很陌生。所以,首先,如果我说了一些愚蠢的话,我很抱歉。哈哈

提前致谢各位!

好吧,我找到了解决方法。

我在遇到这个问题的每个视图控制器中都添加了这行代码:

self.view.frame.size = CGSize(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)

完成后,屏幕会完美地将其边缘调整为智能手机的边缘。 :D

我仍然不知道是什么导致了这个错误。所以,如果有人对此有任何想法,请与我们分享。 :D