Мне пришлось немного покопаться, но я нашел ответ (я хотел бы выкрикнуть user6788419, чей правильный ответ был глубоко занят в другом потоке).
Прежде всего, приведенный выше кодправильный.Проверка того, что нижняя вставка безопасной области больше нуля, точно идентифицирует айфоны с надрезом (на момент написания статьи).Итак, это правильно:
if (@available( iOS 11.0, * )) {
if ([[[UIApplication sharedApplication] keyWindow] safeAreaInsets].bottom > 0) {
// iPhone with notch
}
}
Тем не менее, важно, куда вы поместили вышеприведенный оператор в свой код, потому что UIWindow недоступно до завершения первого цикла выполнения.Это означает, что если вы проверите метку в вашем viewDidLoad или до того, как он завершится (например, в вашем init), нижняя вставка всегда будет равна нулю.
Если вам, как и мне, нужна эта проверка для настройки вашегоВ главном представлении вы можете просто переместить все свои настройки в отдельную функцию (например, postViewDidLoad) и вызвать ее, как только viewDidLoad завершит:
[self performSelector:@selector(postViewDidLoad) withObject:nil afterDelay:0.0f];
Или, альтернативно, вы можете заключить ее: