隐藏和取消隐藏标签栏时管理视图框架

时间:2019-09-09 12:39:51

标签: ios swift

我有一个UIViewController,其底部有标签栏控制器。当用户单击按钮时,我隐藏了标签栏。标签栏已被隐藏,但底部有空白。 ViewController框架没有改变。如何处理呢?如果Tabor控制器被隐藏,则viewController的高度应增加。

  func apply(_ effect: ActivityFeedEffect) {

    switch effect {
    case .feedTypeChange(mode: let mode):
        self.parent?.tabBarController?.tabBar.isHidden = mode == .hidden
    }
}

2 个答案:

答案 0 :(得分:0)

这是UITabBarController上的扩展,可以使用。

这基本上是更新视图的框架。 您可以根据用例添加动画和其他帧处理(如果需要)。但这可以引导您朝这个方向前进。

 extension UITabBarController {
      func hideTabBar(isHidden:Bool) {
        if (isTabBarAlreadyHidden() == isHidden) { return }
        let frame = self.tabBar.frame
        let height = frame.size.height
        let offsetY = (isHidden ? -height : height)
        self.tabBar.frame.offsetBy(dx:0, dy:offsetY)
        self.view.frame = CGRect(x:0,y:0,width: self.view.frame.width, height: self.view.frame.height + offsetY)
        self.view.setNeedsDisplay()
        self.view.layoutIfNeeded()
    }

    func isTabBarAlreadyHidden() ->Bool {
        return self.tabBar.frame.origin.y < UIScreen.main.bounds.height
    }
 }

答案 1 :(得分:0)

在我的情况下,我已在情节提要中将扩展的Edges配置为位于底部栏和不透明栏下面(参见图片)。因此,“我的视图”总是占据着孔洞屏幕,并且不需要调整框架。也许有帮助。

我的结构是标签栏->导航控制器-> TableView(这里我隐藏/显示了标签栏)

storyboard