正在根据启动故事板加载屏幕偏离中心位置吗?

问题描述 投票:0回答:1

我有2个故事板:入门和主要。就执行而言,一切都很好。问题是我在Main.storyboard的开始处有加载屏幕,根据启动的故事板,外观看起来有所不同。

方案1:新用户启动该应用程序,先经过Onboarding.storyboard,然后启动Main.storyboard,加载屏幕如下所示:Correct Screen

方案2:用户第二次启动该应用程序,因此未启动Onboarding.storyboard:加载屏幕偏离中心,如下所示:Wrong Screen

长话短说:如果没有Onboarding.storyboard,则外观不正确。仅在iPad横向上显示该问题。肖像看起来不错。

我所有的加载屏幕代码都在Main.Storyboard的第一个视图控制器中,所以我猜问题出在代码的调用顺序上?

Onboarding.Storyboard仅具有1个视图控制器Main.Storyboard变为:TabBarController-> NavController-> FirstVC

我将我的SceneDelegate代码与FirstVC的加载屏幕代码一起放置在下面。

[如果您想更深入地研究,我正在使用github上的RevealingSplashView。因为我认为这不是问题,所以我没有进一步讨论。

SceneDelegate:

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    guard let windowScene = (scene as? UIWindowScene) else { return }

    window = UIWindow(frame: windowScene.coordinateSpace.bounds)
    window?.windowScene = windowScene

    let onboardingStoryboard = UIStoryboard(name: "Onboarding", bundle: nil)
    let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
    var vc: UIViewController

    if UserDefaults.standard.value(forKey: "firstTimer") == nil {
        vc = onboardingStoryboard.instantiateInitialViewController()!
    } else {
        vc = mainStoryboard.instantiateInitialViewController()!
    }

    self.window?.rootViewController = vc
    self.window?.makeKeyAndVisible()
}

FirstVC相关代码:

class firstVC: UIViewController {

    var revealingSplashView : RevealingSplashView!

override func viewDidLoad() {
    super.viewDidLoad()

    showLoadingScreen()
}

func showLoadingScreen() {

       revealingSplashView = RevealingSplashView(iconImage: UIImage(named: "Icon")!, iconInitialSize: CGSize(width: 150, height: 150), backgroundImage: UIImage(named: "loadBackground")!)
       revealingSplashView.animationType = .heartBeat
       revealingSplashView.startAnimation()

       view.addSubview(revealingSplashView)
}
ios swift storyboard launch scene
1个回答
0
投票

请检查两个情节提要中的布局约束是否相同。我建议只将它们设置为水平居中和垂直居中。

在您的场景委托回调中,为什么每个情节提要板两次调用InstantiateInitialViewController()?

在我的iOS 12项目中,我使用情节提要来开始工作。在应用程序委托didFinishLaunching中,当且仅当它是新用户时,我才会覆盖并设置窗口。因此,我的“主要”故事板将在大多数时间启动。

此处可以应用相同的技术。签出您需要设置UIScene故事板才能工作的Info.plist值。如果要显示第一次入职,可以覆盖该窗口,否则让系统实例化您的主故事板。

© www.soinside.com 2019 - 2024. All rights reserved.