Почему Swift НЕ загрузил это представление должным образом, в то время как Objective-C сделал? - PullRequest
0 голосов
/ 13 декабря 2018

Я пытался программировать в Swift, но мне не удалось выполнить простую программу.Всего несколько строк кода для создания окна с пустым представлением.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.


    self.window = UIWindow(frame: CGRect(x: 0.0, y: 0.0, width: 640.0, height: 960.0))

    let viewController = UIViewController()

    let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 640.0, height: 960.0))

    view.backgroundColor = UIColor.white

    viewController.view = view

    self.window?.rootViewController = viewController

    self.window?.makeKeyAndVisible()

    return true

}

Этот код создает представление, которое не заполняет экран.Я пробовал границы экрана, рамки и масштаба, но, к сожалению, не получилось.

Но когда я попробовал следующее в Objective-C, он запустился как ожидалось:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

self.window = [[UIWindow alloc] initWithFrame:CGRectMake(0.0, 0.0,640.0,960.0)];

UIViewController *viewController = [[UIViewController alloc] init];

UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0,640.0,960.0)];

[view setBackgroundColor:[UIColor whiteColor]];

viewController.view = view;

[self.window setRootViewController:viewController];

[self.window makeKeyAndVisible];

return YES;

}

1 Ответ

0 голосов
/ 14 декабря 2018

Я не могу объяснить, почему код Objective-C работает так, как вы ожидаете.Но я знаю, что не так с кодом Swift:

Всего несколько строк кода для создания окна с пустым представлением

Но то, что вы делаете, некак это сделать;вот ваш код с некоторыми вставленными комментариями:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: CGRect(x: 0.0, y: 0.0, width: 640.0, height: 960.0))
    // wrong; there is no need to frame the window
    // and if you do frame it, it must be framed to the actual screen size

    let viewController = UIViewController()
    let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 640.0, height: 960.0))
    view.backgroundColor = UIColor.white
    viewController.view = view
    // wrong; you must never assign a view controller a view like this...
    // except in the view controller's own `loadView` method

    self.window?.rootViewController = viewController
    self.window?.makeKeyAndVisible()
    return true
}

Итак, изменив при необходимости:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow()
    let viewController = UIViewController()
    viewController.view.backgroundColor = .white
    self.window?.rootViewController = viewController
    self.window?.makeKeyAndVisible()
    return true
}

И вот, минимально правильно построенное приложение с пустыми окнами без раскадровки (или, по крайней мере,, если у него есть раскадровка, он игнорирует его).

...