Swift:将标签栏控制器移动到视图控制器的顶部

时间:2016-06-04 10:42:06

标签: ios swift uitabbarcontroller

目前我的标签栏控制器位于视图控制器的底部。我想知道是否有办法将它移动到视图控制器的顶部,因为我似乎无法找到任何文档。

4 个答案:

答案 0 :(得分:2)

Swift 3

let rect = self.tabBar.frame;
self.tabBar.frame  = rect.insetBy(dx: 0, dy:  -view.frame.height + self.tabBar.frame.height + (self.navigationController?.navigationBar.frame.height)!)

答案 1 :(得分:0)

您可以尝试使用UIViewController代替UITabBarController,然后通过约束将TabBar控件置于视图的顶部。 另一种方法是创建自己的标签栏。(:

答案 2 :(得分:0)

您无法更改UITabbar上的排名。阅读标签栏Apple documentation

如果你想在viewController顶部设置tabbar之类的效果,那么你可以通过使用一个相同大小的tabbar的uiview和该视图中的多个uibuttons来管理它。并将该视图设置在顶部或您要显示标签栏的任何位置。您必须在按钮单击时管理viewcontrollers显示并将该视图管理到每个视图控制器。所以这是一项非常困难的任务,所以最好使用系统提供的默认tabbarController。

答案 3 :(得分:0)

Swift 5 | Xcode 11

尝试在扩展 UITabBarController 的类中覆盖viewWillLayoutSubviews(),然后输入以下内容:-

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    self.tabBar.invalidateIntrinsicContentSize()

    var tabSize: CGFloat = 44.0;

    var orientation: UIInterfaceOrientation = UIApplication.shared.statusBarOrientation

    if (orientation.isLandscape) {
        tabSize = 32.0;
    }

    var tabFrame: CGRect = self.tabBar.frame;

    tabFrame.size.height = tabSize;

    tabFrame.origin.y = self.view.frame.origin.y;

    self.tabBar.frame = tabFrame;

    // Set the translucent property to false then back to true to
    // force the UITabBar to reblur, otherwise part of the
    // new frame will be completely transparent if we rotate
    // from a landscape orientation to a portrait orientation.

    self.tabBar.isTranslucent = false;
    self.tabBar.isTranslucent = true;
}

参考:https://stackoverflow.com/a/29580094/6117565