Как программно добавить макет безопасной зоны в UIStackView? - PullRequest
0 голосов
/ 03 июля 2018

Мне было интересно, есть ли умный способ программно добавить макет безопасной области в 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.

В настоящее время это выглядит так. И мне нужно, чтобы он был выше в безопасной зоне. AdMob display

1 Ответ

0 голосов
/ 03 июля 2018

Не уверен, что лучший способ сделать это, но когда я столкнулся с подобной ситуацией, вот как я сделал это программно:

CGFloat yPos = [UIScreen mainScreen].bounds.size.height;
CGFloat width = [UIScreen mainScreen].bounds.size.width;
if (@available(iOS 11.0, *)) {
    UIWindow *window = UIApplication.sharedApplication.keyWindow;
    CGFloat bottomPadding = window.safeAreaInsets.bottom;
    CGFloat topPadding = window.safeAreaInsets.top;
    CGFloat leftPadding = window.safeAreaInsets.left;
    CGFloat rightPadding = window.safeAreaInsets.right;
    yPos -= (bottomPadding + topPadding);
    width -= (leftPadding + rightPadding);
}
...