4

我想在我的项目中添加第 6 个选项卡栏。当我尝试这样做时,我得到了更多选项,但是当我单击更多选项卡时没有任何反应。为我提供关于这个以及任何其他逻辑的良好解决方案。

4

4 回答 4

9

在swift中,子类化UITabBarController并实现:

override var traitCollection: UITraitCollection {
    let realTraits = super.traitCollection
    let lieTrait = UITraitCollection.init(horizontalSizeClass: .regular)
    return UITraitCollection(traitsFrom: [realTraits, lieTrait])
}
于 2016-10-20T06:40:59.873 回答
7

从 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 样式,标题位于图标的右侧。]

于 2015-12-22T21:42:53.417 回答
1

您可以从这里使用自定义标签栏:http: //cocoacontrols.com/platforms/ios/controls/infinitabbar

甚至这个: http ://cocoacontrols.com/platforms/ios/controls/ciexpandabletabbar

于 2012-04-25T12:01:47.060 回答
1

使 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])
    }
}

在此处输入图像描述

于 2019-05-11T09:45:04.123 回答