如何在 iOS 14 中更改 TabBar 位置

How to change a TabBar location in iOS 14

在我的应用程序中,我希望能够在我的 TabBar 下放置一个 UIView(以使用广告横幅)。我成功实现了 UIView,但我无法更改 TabBar 位置(TabBar 位于 UIView 上方)。我尝试了 iOS 13 和早期的解决方案,但它们不适用于 iOS 14。我的 UIView 仍然在 TabBar 的前景中。

我希望它成为的示例:

我现在的代码:

class MainTabBarController: UITabBarController {
...
lazy var bannerAd: UIView = {
   let view = UIView()
   view.translatesAutoresizingMaskIntoConstraints = false
   view.backgroundColor = .green
   return view
}()
...
override func viewDidLoad() {
   super.viewDidLoad()
   view.addSubview(bannerAd)
   bannerAd.heightAnchor.constraint(equalToConstant: 44).isActive = true
   bannerAd.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
   bannerAd.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true
}
...
override func viewWillLayoutSubviews() {
   super.viewWillLayoutSubviews()
   self.tabBar.invalidateIntrinsicContentSize()
   var tabFrame = self.tabBar.frame
   tabFrame.size.height = tabBarHeight
   tabFrame.origin.y = tabFrame.origin.y - 44
   self.tabBar.frame = tabFrame
   }
}

你可以试试(关键是使用 viewDidLayoutSubviews 而不是 viewWillLayoutSubviews

class MainTabBarController: UITabBarController {
 
    lazy var bannerAd: UIView = {
       let view = UIView()
       view.translatesAutoresizingMaskIntoConstraints = false
       view.backgroundColor = .green
       return view
    }()
     
    override func viewDidLoad() {
       super.viewDidLoad()
       view.addSubview(bannerAd)
       bannerAd.heightAnchor.constraint(equalToConstant: 44).isActive = true
       bannerAd.leadingAnchor.constraint(equalTo: view.leadingAnchor)
       bannerAd.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
       bannerAd.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true
    }
     
    override func viewDidLayoutSubviews() {
       super.viewDidLayoutSubviews()
       self.tabBar.invalidateIntrinsicContentSize()
       var tabFrame = self.tabBar.frame
       tabFrame.size.height = 44
       tabFrame.origin.y = tabFrame.origin.y - 44
       self.tabBar.frame = tabFrame
       }
}