iOS UITabBarController, созданный программно, не отображает свой контроллер навигации "More" - PullRequest
0 голосов
/ 29 мая 2020

Я хочу создать iOS UITabBarController с 6 дочерними контроллерами представления, которого достаточно, чтобы вызвать вкладку «Еще» на iPhone 11 Pro Max в портретной ориентации. В качестве эксперимента я хотел бы сделать это программно в Swift, не внося никаких изменений в файл Main.storyboard моего проекта Xcode. Ниже приведен весь мой файл ViewController.swift с использованием Xcode 11.5 по умолчанию «Приложение для одного просмотра» в macOS Catalina 10.15.4.

import UIKit;

class ViewController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad();
        // Do any additional setup after loading the view.

        struct Band {
            let badge: String;
            let color: UIColor;
            let systemItem: UITabBarItem.SystemItem;
        }

        let bands: [Band] = [
            Band(badge: "0", color: .red,    systemItem: .bookmarks),
            Band(badge: "1", color: .orange, systemItem: .contacts),
            Band(badge: "2", color: .yellow, systemItem: .downloads),
            Band(badge: "3", color: .green,  systemItem: .favorites),
            Band(badge: "4", color: .blue,   systemItem: .featured),
            Band(badge: "5", color: .purple, systemItem: .history)
        ];

        let kids: [UIViewController] = bands.map {
            let viewController: UIViewController = UIViewController();
            viewController.tabBarItem = UITabBarItem(tabBarSystemItem: $0.systemItem, tag: Int($0.badge)!);
            viewController.tabBarItem.badgeValue = $0.badge;
            viewController.view.backgroundColor = $0.color;
            return viewController;
        }

        //Make sure all 6 kids are present and okay.
        kids.forEach {print($0.tabBarItem.tag, $0.tabBarItem.badgeValue!);}

        setViewControllers(kids, animated: true);  //Why only getting 4 of 6 in portrait?
        print("viewControllers!.count = \(viewControllers!.count)");
    }
}

viewControllers! .Count должно быть 6. Но когда я запускаю на iPhone 11 Симулятор Pro Max в портретной ориентации, viewControllers! .Count равен 4, и я вижу вкладки только для первых 4 дочерних элементов, без вкладки «Еще». (Когда я запускаю проект на симуляторе iPhone 11 Pro Max, который уже находится в альбомной ориентации, viewControllers! .Count равен 6, и я вижу вкладки для всех 6 дочерних элементов.) То же самое происходит с моим iPhone 8 Plus. симулятор. Почему я получаю только 4 из 6 без «Больше» в портретной ориентации, и можно ли сделать то, что я пытаюсь сделать, просто изменив файл ViewController.swift? Заранее спасибо. enter image description here

1 Ответ

0 голосов
/ 29 мая 2020

Похоже, вы начали с приложения Single View по умолчанию, а затем изменили свой класс с:

class ViewController: UIViewController {

на:

class ViewController: UITabBarController {

, что не сработает.

Предполагая, что это так:

  • удалить контроллер представления из раскадровки
  • добавить UITabBarController
  • удалить два поставляемых контроллера представления "по умолчанию" с ним
  • установите Custom Class для вновь добавленного контроллера панели вкладок на ViewController

Это должно сработать.

Боковое примечание: я бы изменил имя класса ...

class MyTabBarController: UITabBarController {
...