是*可以*制作自己的标签栏控制器吗?

时间:2018-04-20 14:17:42

标签: ios iphone

我有一个项目,我们的标签栏有一个大的中间按钮(在标签栏上方延伸)和其他自定义行为,包括徽章图标和彩色标签。

我变得“聪明”并且决定只编写我自己的标签栏和标签栏控制器来配合它。我遇到的问题是,当其中一个选项卡包含在UINavigationController中时,该视图总是占用整个屏幕(您无法将UINavigationController捕获到一个小的子视图中),因此我必须手动插入内容在那些观点上。

有没有一种聪明的方法来处理这个问题?将每个屏幕上的内容缩短100分感觉很糟糕......根本感觉不对。

我应该采取什么方法......或者我应该以编程方式自动化内容插入?

2 个答案:

答案 0 :(得分:0)

标签栏控制器只是一个滚动视图,底部有一个视图,可以在滚动视图的偏移之间切换。我假设您希望标签栏控制器位于应用程序的根目录,因此在根视图控制器中添加UIScrollView

然后将视图控制器(选项卡)的视图添加到该滚动视图,并相应地锚定它们以便滚动视图滚动。使这些视图控制器的高度和宽度全屏。在将它们添加到滚动视图之前,必须在根视图控制器及其选项卡之间创建父子关系。

self.addChildViewController(tabOneViewController)
tabOneViewController.view.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(tabOneViewController.view)
tabOneViewController.didMove(toParentViewController: self)
tabOneViewController.delegate = self // so that your tabs can communicate back to the controller
// add constraints

这些视图控制器中的每一个理想地都是或包含该部分的导航控制器。

然后只需将标签栏添加到视图控制器的view,而不是滚动视图(在滚动视图后添加它以使其位于滚动视图上方)。此标签栏只是常规UIView,通常固定在视图控制器的底部安全区域。因为它是视图控制器视图的一部分,而不是滚动视图,所以它对其背后的内容没有影响。

这样的自定义标签栏设置的好处是您可以在点按或平移手势之间导航。要通过点击标签栏中的按钮在标签之间导航,只需更改滚动视图的内容偏移量:

// this would move to the third tab
scrollView.contentOffset = CGPoint(x: view.bounds.width * 2, y: 0)

添加你的铃声和口哨,你就可以了。

答案 1 :(得分:0)

查看本教程:Creating a Custom Tab Bar