目前我的标签栏控制器位于视图控制器的底部。我想知道是否有办法将它移动到视图控制器的顶部,因为我似乎无法找到任何文档。
答案 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)
尝试在扩展 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;
}