Поскольку iPhoneX поставляется с iOS 11.0 и выше, вам просто нужно изменить функцию positionBannerViewFullWidthAtBottomOfSafeArea .Нет необходимости корректировать ограничения в функции positionBannerViewFullWidthAtBottomOfView , предназначенной для версий до 11.
Изменить
[guide.bottomAnchor constraintEqualToAnchor:bannerView.bottomAnchor]
на
[guide.topAnchor constraintEqualToAnchor:bannerView.topAnchor]
Thisприкрепит верхнюю часть вашего баннера AdMob к верхней части руководства.
Элегантное решение
Чтобы сократить стандартное решение admob, добавьте баннер в представление и установитеВ дополнение к необходимым ограничениям следующий фрагмент кода очень полезен.
Разница между iOS 11 и предыдущими версиями заключается в том, что в 11 введена безопасная зона.До 11 iOS были LayoutMargins.Мы добавили небольшую функцию, которая возвращает нам либо руководство по безопасной области, либо отступы макета, и избавляемся от всех positionBannerViewFullWidthAtBottomOfView функций с помощью этого:
- (void)addBannerViewToView:(UIView *)bannerView {
bannerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:bannerView];
[self positionBannerViewFullWidthAtBottomOfSafeAreaOrLayoutMargins:bannerView];
}
#pragma mark - view positioning
- (void)positionBannerViewFullWidthAtBottomOfSafeAreaOrLayoutMargins:(UIView *_Nonnull)bannerView {
// Position the banner. Stick it to the bottom of the Safe Area or layout margins.
// Make it constrained to the edges of the safe area or layout margins (iOS < 11).
//Call the method to set the layout guide.
let guide = correctLayoutGuide //Swift
UILayoutGuide * guide = [self correctLayoutGuide]; //Objective-C
[NSLayoutConstraint activateConstraints:@[
[guide.leftAnchor constraintEqualToAnchor:bannerView.leftAnchor],
[guide.rightAnchor constraintEqualToAnchor:bannerView.rightAnchor],
//[guide.topAnchor constraintEqualToAnchor:bannerView.topAnchor] // Banner at TOP
[guide.bottomAnchor constraintEqualToAnchor:bannerView.bottomAnchor] // Banner at BOTTOM
]];
}
//This function returns safeAreaLayoutGuide for iOS 11 and above
//and layoutMarginsGuide for iOS < 11.
//Swift
var correctLayoutGuide: UILayoutGuide {
if #available(iOS 11.0, *) {
return view.safeAreaLayoutGuide
} else {
return view.layoutMarginsGuide
}
}
//Objective-C
-(UILayoutGuide *) correctLayoutGuide {
if (@available(ios 11.0, *)) {
return [self.view safeAreaLayoutGuide];
} else {
return [self.view layoutMarginsGuide];
}
}