ios - 自定义标签栏 iOS

标签 ios swift user-interface uitabbarcontroller uitabbar

enter image description here

我想创建一个如图所示的自定义标签栏。我不知道如何开始子类化 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/

相关文章:

ios - 如果 AppleWebKit 出现在用户代理中,是否意味着它肯定是苹果设备?

swift - 如何在 Xcode 6 中模拟应用程序的首次启动

java - 通过 Swing-java 实现数据库实体之间关系的 UI

ios - Swift TableView segue to new ViewController with wrong index path (倒数第二个选择)

iphone - 在 iPhone 上收听传入的 HTTP 消息

ios - 使用 NSURLSession 的发布请求没有返回任何发布数据

swift - 无法从标有相同 globalActor 的闭包安全地访问 globalActor 的方法

java - 用java重画

java - JTree 中的 JTextField - 使其可编辑

ios - SwiftUI 中的 TextField 和 SecureField 之间是否存在高度差异?