【问题标题】:How to add safe area layout to UIStackView programmatically?如何以编程方式向 UIStackView 添加安全区域布局?
【发布时间】:2018-07-02 21:56:34
【问题描述】:

我想知道是否有一种聪明的方法可以以编程方式将安全区域布局添加到 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
}

我尝试以这种方式实现它Use Safe Area Layout programmatically。但似乎这种方式不适用于 UIStackViews。

目前它看起来像这样。我需要它在安全区域的上方。

【问题讨论】:

    标签: swift admob uistackview safearealayoutguide


    【解决方案1】:

    不确定是否是最好的方法,但是当我遇到类似情况时,我就是以编程方式进行的:

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-01
      • 2018-05-25
      • 1970-01-01
      • 2018-05-26
      • 2017-07-16
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多