问题描述
我有一个CollectionView,从那里我可以对TabBarController进行模态搜索(全屏显示)。在TabBarController的tabBar中间是一个UIButton,它将模式视图推到TabBarController上方(不是全屏)。 从TabBarController推送的模式视图消失后,UIButton在tabBar中消失(如图片所示)
在打开模式视图之前
解雇后
当第二个模态呈现的ViewController全屏显示时,这不会不会发生。以下设置可以正常运行:
CollectionView --modal全屏-> TabBarController --modal全屏-> anotherViewController
当我将第一个VC嵌入NavigationController并在Navigationstack中推送TabBarController时,也不会发生这种情况。这在这里也可以正常工作:
NavigationView(CollectionView)-按钮-> TabBarController --modal-> anotherViewController
当我以模态显示ViewController而不是全屏显示另一个模态显示的ViewController时,问题仅显示出来。现在我想了解为什么会这样。
这是我设置TabBar的方式:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
setupTabBarAppearance()
setupTabBarShadow()
setupTabBar()
}
private func setupTabBar() {
middleButtonView.center = CGPoint(x: tabBar.frame.width / 2,y: 10)
middleButton.center = CGPoint(x: middleButtonView.frame.width / 2,y: middleButtonView.frame.width / 2)
middleButtonView.addSubview(middleButton)
tabBar.addSubview(middleButtonView)
}
这是我呈现ModalViewController的方式:
@objc private func showController() {
let viewController = TableViewController()
viewController.modalPresentationStyle = .automatic
self.present(viewController,animated: true)
}
我在提供的控制器中关闭了提供的ViewController:
@objc func dismissController(){
self.dismiss(animated: true,completion: nil)
}
感谢您提供的帮助
解决方法
更改约束确实有所帮助。我的设置现在看起来像这样,它就像一个饰物。感谢卢卡斯的想法!但是我仍然不知道为什么仍然需要更改。
private func setupTabBar() {
middleButtonView.addSubview(middleButton)
tabBar.addSubview(middleButtonView)
middleButtonView.centerXAnchor.constraint(equalTo: tabBar.centerXAnchor,constant: 0).isActive = true
middleButtonView.centerYAnchor.constraint(equalTo: tabBar.centerYAnchor,constant: -30).isActive = true
middleButtonView.heightAnchor.constraint(equalToConstant: buttonViewRadius * 2).isActive = true
middleButtonView.widthAnchor.constraint(equalToConstant: buttonViewRadius * 2).isActive = true
middleButton.centerYAnchor.constraint(equalTo: middleButtonView.centerYAnchor,constant: 0).isActive = true
middleButton.centerXAnchor.constraint(equalTo: middleButtonView.centerXAnchor,constant: 0).isActive = true
middleButton.heightAnchor.constraint(equalToConstant: buttonRadius * 2).isActive = true
middleButton.widthAnchor.constraint(equalToConstant: buttonRadius * 2).isActive = true
}