Быстро 5
я просто делаю это. Это просто, и очень близко к реальной вещи (просто добавил 'r').
extension UIView {
var saferAreaLayoutGuide: UILayoutGuide {
get {
if #available(iOS 11.0, *) {
return self.safeAreaLayoutGuide
} else {
return self.layoutMarginsGuide
}
}
}
Использование как это:
button.topAnchor.constraint(equalTo: view.saferAreaLayoutGuide.topAnchor, constant: 16)
для iOS 9:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.navigationController.navigationBar.translucent = NO;
}
, если Вы включаете авторасположение и добавляете ограничения представления к [1 113] безопасная область , Вы хороши для выхода за предел iOS 11 + , но это не может работать хорошо с [1 115], iOS 9 и представление могут появиться под Вашим панель навигации . Для решения этой проблемы можно отключить полупрозрачный атрибут в [1 118]' viewWillAppear: (BOOL) анимировал ' метод.
К не повредить предыдущее состояние [1 119] полупрозрачный атрибут Вашего панель навигации , необходимо сохранить предыдущее значение и сбросить его в [1 121]' viewWillDisappear: (BOOL) анимировал '
@interface YourViewController ()
@property (nonatomic, assign) BOOL translucentState;
@end
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.translucentState = self.navigationController.navigationBar.translucent;
self.navigationController.navigationBar.translucent = NO;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.navigationBar.translucent = self.translucentState;
}
P.S. , не должен использовать edgesForExtendedLayout с выполнением этого:
self.edgesForExtendedLayout = UIRectEdgeNone;
Выезд документация Apple: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621515-edgesforextendedlayout
Вот мой iOS 9 к iOS 11 + обертка решения в быстрых 4 +
let safeAreaTopAnchor:NSLayoutYAxisAnchor?
if #available(iOS 11.0, *) {
safeAreaTopAnchor = contentView.safeAreaLayoutGuide.topAnchor
} else {
// Fallback on earlier versions
var parentViewController: UIViewController? {
var parentVCResponder: UIResponder? = self
while parentVCResponder != nil {
parentVCResponder = parentVCResponder!.next
if let viewController = parentVCResponder as? UIViewController {
return viewController
}
}
return nil
}
safeAreaTopAnchor = parentViewController?.topLayoutGuide.bottomAnchor
}