Используя разные раскадровки для разных размеров экрана при загрузке? xcode Swift - PullRequest
0 голосов
/ 29 марта 2019

Я просто хочу загрузить определенную раскадровку, когда приложение загружается определенным размером 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 :)' почти соответствует приложению необязательного требования '(_: didFinishLaunchingWithOptions :)' протокола 'UIApplicationDelegate'

'instantiateViewControllerWithIdentifier' был переименован в 'instantiateViewController (withIdentifier:)'

Невозможно вызвать значение нефункционального типа 'UIScreen'

Невозможно преобразовать значение типа 'CGFloat' в указанный тип 'NSNumber'

1 Ответ

1 голос
/ 29 марта 2019

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
    }
...