自定义标签栏iOS

问题描述 投票:0回答:1

enter image description here

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

ios swift user-interface uitabbarcontroller uitabbar
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.