使用不同的故事板加载不同的屏幕尺寸?xcode Swift

使用不同的故事板加载不同的屏幕尺寸?xcode Swift,swift,storyboard,screen-size,Swift,Storyboard,Screen Size,我只想在某个iPhone大小加载应用程序时加载一个特定的故事板。 我真的很难用自动布局来获得想要的结果 我做了很多搜索,找到了4年前有人共享的代码,并尝试使用它,但我得到了很多错误,请有更多知识的人看看代码,看看是否需要更新 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Boo

我只想在某个iPhone大小加载应用程序时加载一个特定的故事板。 我真的很难用自动布局来获得想要的结果

我做了很多搜索,找到了4年前有人共享的代码,并尝试使用它,但我得到了很多错误,请有更多知识的人看看代码,看看是否需要更新

    func application(application: UIApplication, 
    didFinishLaunchingWithOptions launchOptions: [NSObject: 
    AnyObject]?) -> Bool {

var bounds: CGRect = UIScreen.mainScreen().bounds
var screenHeight: NSNumber = bounds.size.height
var deviceFamily: String

var mainView: UIStoryboard!
mainView = UIStoryboard(name: "iphone35Storyboard", bundle: nil)
let viewcontroller : UIViewController = mainView.instantiateViewControllerWithIdentifier("iphone35") as UIViewController
self.window!.rootViewController = viewcontroller

if screenHeight == 480  {
    deviceFamily = "iPhoneOriginal"
    // Load Storyboard with name: iPhone4
    var mainView: UIStoryboard!
    mainView = UIStoryboard(name: "Main", bundle: nil)
    let viewcontroller : UIViewController = mainView.instantiateViewControllerWithIdentifier("iphone4") as UIViewController
    self.window!.rootViewController = viewcontroller

} else {

    var mainView: UIStoryboard!
    mainView = UIStoryboard(name: "IpadStoryboard", bundle: nil)
    let viewcontroller : UIViewController = mainView.instantiateViewControllerWithIdentifier("ipad") as UIViewController
    self.window!.rootViewController = viewcontroller

    if screenHeight == 920 {
        deviceFamily = "Pad"
        // Load Storyboard with name: ipad
        var mainView: UIStoryboard!
        mainView = UIStoryboard(name: "IpadStoryboard", bundle: nil)
        let viewcontroller : UIViewController = mainView.instantiateViewControllerWithIdentifier("ipad") as UIViewController
        self.window!.rootViewController = viewcontroller
    }
    }
    }
经历的错误-

实例方法“application(application:didFinishLaunchingWithOptions:)”几乎与协议“UIApplicationLegate”的可选要求“application(application:didFinishLaunchingWithOptions:)”匹配

“InstanceEviewController WithiIdentifier”已重命名为“InstanceEviewController(WithiIdentifier:)”

无法调用非函数类型“UIScreen”的值


无法将类型“CGFloat”的值转换为指定的类型“NSNumber”

Swift仍在发展中,每个版本的Swift在语法上都有很多变化。您遇到的所有这些错误都是因为4年前的代码是为一些较旧版本的swift编写的。在Swift 4中,您可以使用

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        self.window = UIWindow(frame: UIScreen.main.bounds)

        let deviceIdiom = UIScreen.main.traitCollection.userInterfaceIdiom

        if deviceIdiom == .pad {

            let storyboard = UIStoryboard(name: "YourFirstStoryboard", bundle: nil)
            if let firstVC = storyboard.instantiateViewController(withIdentifier: "FirstVC_Identifier") as? FirstVC {
                self.window?.rootViewController = firstVC
            }

        } else if deviceIdiom == .phone {

            if (UIDevice.current.userInterfaceIdiom == .phone) && (UIScreen.main.bounds.size.height < 568.0) {

                /* "< 568" = iphone 4 or less */
                /* Similarly you can use other "else if" conditions with.. */
                /* "== 568" = iphone 5 and 5c */
                /* "== 667" = iphone 6,7 or 8 */
                /* "== 736" = iphone 6P,7P or 8 */
                /* "== 812" = iphone X, XR or XS */
                /* "== 896" = iphone X, XR or XS */

                let storyboard = UIStoryboard(name: "YourSecondStoryboard", bundle: nil)
                if let secondVC = storyboard.instantiateViewController(withIdentifier: "SecondVC_Identifier") as? SecondVC {
                    self.window?.rootViewController = secondVC
                }

            }
        }

        self.window?.makeKeyAndVisible()

        return true
    }
func应用程序(application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplication.launchOptions键:任意])->Bool{
self.window=UIWindow(框架:UIScreen.main.bounds)
让deviceIdiom=UIScreen.main.traitCollection.userInterfaceIdiom
如果deviceIdiom==.pad{
let storyboard=UIStoryboard(名称:“YourFirstStoryboard”,bundle:nil)
如果让firstVC=storyboard.InstanceEviewController(带有标识符:“firstVC\U标识符”)作为?firstVC{
self.window?.rootViewController=firstVC
}
}如果deviceIdiom==.phone,则为else{
if(UIDevice.current.userInterfaceIdiom==.phone)和&(UIScreen.main.bounds.size.height<568.0){
/*“<568”=iphone 4或更低版本*/
/*类似地,您可以将其他“else-if”条件用于*/
/*“==568”=iphone 5和5c*/
/*“==667”=iphone 6、7或8*/
/*“==736”=iphone 6P、7P或8*/
/*“==812”=iphone X、XR或XS*/
/*“==896”=iphone X、XR或XS*/
let storyboard=UIStoryboard(名称:“YourSecond storyboard”,bundle:nil)
如果让secondVC=storyboard.InstanceEviewController(标识符为:“secondVC\U标识符”)作为?secondVC{
self.window?.rootViewController=secondVC
}
}
}
self.window?.makeKeyAndVisible()
返回真值
}

不要使用这些代码,扔掉它,学习自动布局。如果你正在努力解决这个问题,就发布一个问题。这是一个非常简单的API,可以很快学会。谢谢,但如果可能的话,我真的只需要让上面的代码正常工作。自动布局和故事板的构建正是为了满足您的问题。苹果不希望你按照自己的方式去做。如果他们看到你这样做,没有人会雇佣你做程序员。用正确的方法学习,非常简单。如果你不能得到自动布局或故事板工作,张贴一个问题在这里,我们将非常高兴地回答它。但是上面的代码在我看来是完全不可能的。谢谢,我真的很感谢你花时间回复。然而,我仍然在上面的代码中遇到错误-(使用未声明的类型“FirstVC”)我应该在哪里或如何使用FirstVC?FirstVC只是我使用的一个名称(我指的是您的第一视图控制器),就像“SecondVC”、“YourFirstStoryboard”和“YourSecondStoryboard”一样。您可以在此处指定视图控制器的名称。我明白了,您还没有为视图控制器使用任何子类。好的,那么您可以使用“let viewcontroller:UIViewController=mainView.instanceeviewcontrollerwhithidentifier(“iphone4”)作为UIViewController”谢谢,但我现在仍然无法确定新代码的位置
let viewcontroller:UIViewController=mainView.instanceeviewcontrollerwhithidentifier(“iphone4”)作为UIViewController
当我替换部分时,我认为我仍然会出现错误(使用未解析的标识符“mainView”),非常抱歉我缺乏知识,我非常感谢您的帮助。另外,我不需要声明我的设备,因为我只在iPhone上运行它…如果这有帮助的话?在类AppDelegate:UIResponder行上,线程1:signal SIGABRT您可以使用storyboard而不是mainView。storyboard和mainView都是我给的随机名称。你可以用任何名字