【问题标题】:Custom Tab Bar iOS自定义标签栏 iOS
【发布时间】:2017-12-25 21:31:00
【问题描述】:

我想创建一个如图所示的自定义标签栏。我不知道如何开始子类化UITabBar 以获得这个结果。 如果我只是有一个根UIViewController,并通过interface builder(一个UIView、图像、圆形按钮等)创建标签栏的感知,并为地图和列表UIViewController添加ContainerView,该怎么办?这种方法的缺点是什么(如果有的话)?调整大小问题(在 iPhone 6 上看起来不错,但在 iPhone X 上看起来不错),因为可能没有标签栏来动态调整大小?

【问题讨论】:

    标签: ios swift user-interface uitabbarcontroller uitabbar


    【解决方案1】:

    当您分解任何UIKit 组件时,例如UITabBar,您将找到的只是其他UIKit 组件,我们都可以使用这些组件。虽然有时使用 Apple 的预构建东西很好,但它们并不总是喜欢我们插手它们,而且它们经常隐藏我们想要修改的行为。

    您应该对创建自己的 UI 组件(例如自定义标签栏)完全零恐惧,对于我们的目的而言,它只不过是带有 UIButtonUIImageView 子视图的 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
    

    关于调整大小的问题,如果你在容器视图控制器中给你的标签栏约束(就像你应该做的那样),它会以各种可能的方式拉伸和旋转而不会失败。

    【讨论】:

      【解决方案2】:

      您可以使用ESTabBarController,它易于使用,可以解决您的问题..:)

      https://github.com/eggswift/ESTabBarController

      【讨论】:

        猜你喜欢
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多