如何在Swift中更改UIViewController的框架

axr492tv  于 2023-03-22  发布在  Swift
关注(0)|答案(1)|浏览(145)

我目前正在将UIViewControllerUIViewControllerRepresentable集成到我的SwiftUI项目中,现在想更改UIViewController的框架。为此,我使用了以下代码:

let vc = UIViewController()
vc.view.frame.size = CGSize(width: kGADAdSizeBanner.size.width, height: kGADAdSizeBanner.size.height)

但是,当我将UIViewControllerRepresentable创建的视图集成到VStack中的SwiftUI项目中时,UIViewController没有我想要的大小。Look at this
我的孔代码是:

func makeUIViewController(context: Context) -> UIViewController {
    let vc = UIViewController()
    vc.view.frame.size = CGSize(width: kGADAdSizeBanner.size.width, height: kGADAdSizeBanner.size.height)
    vc.view.backgroundColor = .gray
    vc.view.alpha = 0
    
    let bannerView = GADBannerView(adSize: kGADAdSizeBanner)
    bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
    bannerView.alpha = 0
    bannerView.rootViewController = vc
    bannerView.delegate = context.coordinator
    bannerView.load(GADRequest())

    vc.view.addSubview(bannerView)
    
    return vc
}

kGADSizeBanner是Google为广告提供的大小变量。
另外,我想知道为什么我的广告没有出现在灰色的UIViewController的中心。有人能帮忙吗?
目前为止我尝试的是:

  1. vc.view.translatesAutoresizingMaskIntoConstraints = false
  2. vc.view.frame = CGRect(origin: .zero, size: CGSize(width: kGADAdSizeBanner.size.width, height: kGADAdSizeBanner.size.height))
slhcrj9b

slhcrj9b1#

UIViewControllerRepresentable实现中覆盖sizeThatFits
对于固定大小,只需返回所需的CGSize,但也可以尝试考虑proposal

func sizeThatFits(_ proposal: ProposedViewSize, uiViewController: UIViewController, context: Context) -> CGSize? {
    kGADAdSizeBanner.size
}

横幅不在视图控制器的中心,因为它位于(0,0),对于没有显式设置位置或添加任何约束的视图,这是一个典型的默认位置。

相关问题