我想创建一个自定义标签栏,如图片所示。我不知道如何开始子类化UITabBar
来获得此结果。
如果我只有一个根UIViewController
,并通过interface builder
(一个UIView,图像,圆形按钮等)创建标签栏的感知,并添加ContainerView
的地图和列表UIViewController
的?如果有的话,这种方法的缺点是什么?调整大小问题(在iPhone 6上看起来不错,但iPhone X看起来不错)因为没有标签栏可以动态调整大小吗?
答案 0 :(得分:0)
当您将任何UIKit
组件分解为其UITabBar
部分时,您要查找的所有组件都与我们所有的UIKit
组件相同允许使用。有时使用Apple的东西很好,因为我们知道它每次都有效。但有时使用Apple的东西并不是那么好,因为他们并不总是喜欢你干预他们预先构建的组件,他们经常隐藏你可能想要修改的行为。
因此,如果您知道自己正在做什么,或者非常愿意学习,我强烈建议您不要担心自己创建自己的东西,比如自定义标签栏,为了您的目的,这可能不再是与UIView
子视图或其他UIButton
子视图的UIView
相关联,并附加了点击手势识别器。如果您有一个主视图控制器,它是容纳子视图控制器的容器视图控制器,请将标签栏放在主控制器中,并且您有一个合法的标签栏,它将始终叠加在屏幕上的所有内容上(除了显示的视图控制器,这正是我们想要的行为。
至于iPhone X和安全区域,只需按照通常的方式应用它们,因为所有自定义标签栏都是:
if #available(iOS 11.0, *) {
tabBar.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
tabBar.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true
tabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
} else {
tabBar.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
tabBar.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
tabBar.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true
}
tabBar.heightAnchor.constraint(equalToConstant: 44).isActive = true
关于调整大小的问题,如果你在主视图控制器中给出了标签栏限制(就像你应该做的那样),它将会以任何可能的方式伸展和旋转。
答案 1 :(得分:0)
您可以使用ESTabBarController
,它易于使用,并且可以解决您的问题..:)