我想在我的项目中添加第 6 个选项卡栏。当我尝试这样做时,我得到了更多选项,但是当我单击更多选项卡时没有任何反应。为我提供关于这个以及任何其他逻辑的良好解决方案。
4 回答
在swift中,子类化UITabBarController
并实现:
override var traitCollection: UITraitCollection {
let realTraits = super.traitCollection
let lieTrait = UITraitCollection.init(horizontalSizeClass: .regular)
return UITraitCollection(traitsFrom: [realTraits, lieTrait])
}
从 iOS 9(可能还有 8)开始,有一种简单的方法可以做到这一点。我不建议使用这个技巧来发布应用程序——6 个选项卡在 4 或 5 上非常狭窄——但知道这一点很容易。
请注意,iPad 标签栏可以有五个以上的标签,而没有“更多”项目。
苹果判断“平板与否”的新方法?是大小类。
因此,子类化UITabBarController
并实现:
-(UITraitCollection *)traitCollection
{
UITraitCollection
*realTraits = [super traitCollection],
*lieTrait = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
return [UITraitCollection traitCollectionWithTraitsFromCollections:@[realTraits, lieTrait]];
}
向其中添加六个子视图控制器,瞧!在这种情况下,看起来苹果正在实践他们所宣扬的东西!
(* 请注意,这也与选项卡中视图控制器的水平大小类有关。您可能希望- setOverrideTraitCollection:forChildViewController:
在适当的时候调用,可能在覆盖的情况下setViewControllers:
,将它们的特征集合“覆盖”回真实的集合。这样他们就不会感到困惑并尝试显示其布局的不适当的宽变体。)
[编辑以稍后添加:从 iOS 12 开始,这个技巧有一个有趣的副作用:对于 5 个或更少的标签,它会将标签栏变成 iPad 样式,标题位于图标的右侧。]
您可以从这里使用自定义标签栏:http: //cocoacontrols.com/platforms/ios/controls/infinitabbar
甚至这个: http ://cocoacontrols.com/platforms/ios/controls/ciexpandabletabbar
使 CustomTabBarVC 从 UITabBarController 继承它并实现它将使您成为可能。
import UIKit
class CustomTabBarVC: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
}
override var traitCollection: UITraitCollection {
let realTraits = super.traitCollection
let fakeTraits = UITraitCollection(horizontalSizeClass: .regular)
return UITraitCollection(traitsFrom: [realTraits, fakeTraits])
}
}