#swift
#swift
Вопрос:
Я пытался внести простое изменение в границы UIWindow в Swift. Пока у меня есть:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions:NSDictionary?) -> Bool {
// Override point for customization after application launch.
//SHIFT EVERYTHING DOWN - THEN UP IN INDIV VCs IF ios7>
var device:UIDevice=UIDevice()
var systemVersion:String=device.systemVersion
println(systemVersion)
//Float(systemVersion)
if (systemVersion >= "7.0") {
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
self.window.setClipsToBounds = true // --> Member doesnt exist in UIWindow
self.window.frame = CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height);
self.window.bounds = CGRectMake(0,0, self.window.frame.size.width, self.window.frame.size.height);
//}
let ok = true
println("Hello World")
return true
}
но я получаю:
У UIWindow нет имени члена в каждой строке self.window.property setter.
Ответ №1:
Проблема в том, что self.window
это необязательно. Сначала вам нужно «развернуть» его. Вам также необходимо использовать clipsToBounds
not setClipsToBounds
.:
if let window = self.window {
window.clipsToBounds = true
window.frame = CGRect(x: 0, y: 20, width: window.frame.size.width, height: window.frame.size.height);
window.bounds = CGRect(x: 0, y: 0, width: window.frame.size.width, height: window.frame.size.height);
}
Примечание: я также обновил CGRectMake до предпочтительного быстрого способа создания CGRect с использованием инициализатора CGRect вместо глобальной CGRectMake
функции.
Ответ №2:
В классе AppDelegate window является необязательной переменной. Вам нужно принудительно развернуть переменную с помощью ! .
Например,
self.window!.clipsToBounds = true
Если вы не знакомы с тем, как работают опции в Swift, ознакомьтесь с документацией Apple о них.
Комментарии:
1. Вау! И здесь я подумал, что Swift должен был сделать кодирование более эффективным. Спасибо!