Мне было интересно, есть ли умный способ программно добавить макет безопасной области в UIStackView. В настоящее время это мои настройки:
// AppDelegate.didFinishLaunchingWithActions
let rvc = window?.rootViewController
adViewController = AdViewController(contentViewController: rvc!)
window?.rootViewController = adViewController
window?.makeKeyAndVisible()
// AdViewController.swift
private var bannerView = GADBannerView(adSize: kGADAdSizeBanner)
let contentViewController: UIViewController
init(contentViewController: UIViewController) {
self.contentViewController = contentViewController
super.init(nibName: nil,bundle: nil)
}
override func loadView() {
let stackView = UIStackView(arrangedSubviews: [contentViewController.view, bannerView])
stackView.distribution = .fill
stackView.axis = .vertical
self.addChildViewController(contentViewController)
contentViewController.didMove(toParentViewController: self)
view = stackView
self.stackView = stackView
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor(white: 0.1, alpha: 1.0)
setupAdbanner()
let adsDisabled = MKStoreKit.shared().isProductPurchased(AppConfig.kRemoveAdsID)
self.setAdvertisingViewHidden(adsDisabled, animated: false)
NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
}
private func setupAdbanner() {
bannerView.delegate = self
bannerView.backgroundColor = .clear
bannerView.rootViewController = self
bannerView.adUnitID = AppConfig.kAdUnitIDBanner
}
Я пытался реализовать это таким образом Использовать макет безопасной зоны программно . Но похоже, что это не работает с UIStackViews.
В настоящее время это выглядит так. И мне нужно, чтобы он был выше в безопасной зоне.