我想创建一个如图所示的自定义标签栏。我不知道如何开始子类化 UITabBar
得到这个结果。
如果我只有一个 Root UIViewController
怎么办? ,并通过interface builder
创建标签栏的感知(一个 UIView、图像、圆形按钮等)并添加 ContainerView
用于 map 和列表 UIViewController
的?如果有的话,这种方法的缺点是什么?调整大小问题(在 iPhone 6 上看起来不错,但在 iPhone X 上看起来不错),因为可能没有标签栏来动态调整大小?
最佳答案
当你打破任何 UIKit
组件关闭,例如 UITabBar
, 你会发现的只是其他的UIKit
组件,我们都可以使用。虽然有时使用 Apple 的预建东西很好,但他们并不总是喜欢我们插手它们,而且他们经常隐藏我们想要修改的行为。
您应该对创建自己的 UI 组件(例如自定义标签栏)完全零恐惧,对于我们的目的而言,它只不过是 UIView
。带有 UIButton
的容器或 UIImageView
subview 。如果您有一个容器 View Controller (包含 subview Controller ),将标签栏放在那里,您将拥有一个合法的标签栏,它将始终叠加在内容 View Controller 上,除了呈现的 View Controller (这正是我们想要的行为)。
就 iPhone X 和安全区域而言,只需按照您通常的 View 方式应用它们,因为这就是您的所有自定义标签栏:
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
对于您对调整大小的担忧,如果您在容器 View Controller 中提供标签栏约束(就像您应该做的那样),它将以各种可能的方式拉伸(stretch)和旋转而不会失败。
关于ios - 自定义标签栏 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47972156/