Панель вкладок не показывает значки?

Я прочитал кучу связанных вопросов, я попробовал, что они сказали, ничего не работает. Не знаю, почему. Итак, у меня есть 3 разных UIStoryboards. Первым из них является Auth Storyboard, который обрабатывает вход/регистрацию, а также ссылку на раскадровку на второй раскадровки Storyboard - Tab. Эта раскадровка содержит 5 других ссылок на раскадровку, которые будут загружать отдельные контроллеры представлений.

Моя проблема заключается в том, что значки не отображаются после входа пользователя в систему. Я настраиваю собственный цвет первого контроллера представления в UITabViewController только для того, чтобы убедиться, что он загружается. Оно делает.

Я попытался установить все изображения/значки, чтобы отобразить их как "Оригинал", не работал. Я установил системный образ, чтобы убедиться, что эта проблема не показана. Также стоит упомянуть, что значки показаны в раскадровке, но когда их компилируют, их в симуляторе не видно.

Что я делаю неправильно?

введите описание изображения здесь

PS: Я изменил цвет оттенка панели вкладок, просто чтобы проверить его, и он работает. Итак, проблема не в этом...

Ответ 1

Проблема со ссылками на раскадровку и отсутствующими значками панели вкладок

Если у вас есть ссылки на раскадровку, прикрепленные к контроллеру панели вкладок, вы заметите, что ссылка на раскадровку на самом деле содержит UITabBarItem :

fake UITabBarItem

Не устанавливайте свойства для этого "поддельного" UITabBarItem!

Ваши настройки ничего не сделают, когда вы запустите приложение. Предоставляемые вами значения влияют ТОЛЬКО на то, что вы видите в Интерфейсном Разработчике, а не на ваше приложение при запуске.

Решение

Что вам нужно сделать, так это перейти к контроллеру ACTUAL, на который указывает ваша ссылка на раскадровку. Этот контроллер представления также будет иметь UITabBarItem. Это "настоящий" UITabBarItem. Установите там свои свойства (значок, заголовок и т.д.), И вы увидите их при запуске приложения.

actual view controller

Ответ 2

Я добавил изображение, описывающее соединения:

  • Подключите контроллер TabBar к вашим пяти контроллерам просмотра

  • Для каждого контроллера просмотра выберите любой контроллер просмотра → Перейти к редактору в вариантах Xcode вверху → Вставить в → Контроллер навигации

  • Выберите нижнюю панель в контроллере навигации → открыть инспектор атрибутов в утилитах → укажите название и изображение, выделенные на изображении

введите описание изображения здесь

Навигация с входа/регистрации на экран TabBar: Укажите идентификатор раскадровки в TabBarController, например. "TabBarController" и создайте экземпляр TabBarController, используя идентификатор раскадровки соответствующей раскадровки.

Swift 3

func navigateToTabBar() {
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let nextViewController = storyBoard.instantiateViewController(withIdentifier: "TabBarController") as UIViewController
    self.present(nextViewController, animated:true, completion:nil)
}

Ответ 3

Подключите свои пять контроллеров представлений с контроллером навигации, а затем интерфейс, связанный с навигационным контроллером, к контроллеру панели вкладок.

Ответ 4

Pleasr Попробуйте создать программный код. Ниже приведен код

- (void)customizeTabBar{
 UITabBar *tabBar = tabBarController.tabBar;
[tabBar setBarTintColor:TABBAR_COLOR];

}

- (void)customizeBarButtonsItems:(NSArray*)array{
[[array objectAtIndex:0] setImage:[[UIImage imageNamed:@"MusicNormal"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[[array objectAtIndex:0] setSelectedImage:[[UIImage imageNamed:@"MusicSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

[[array objectAtIndex:1] setImage:[[UIImage imageNamed:@"TrimNormal"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[[array objectAtIndex:1] setSelectedImage:[[UIImage imageNamed:@"TrimSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

[[array objectAtIndex:2] setImage:[[UIImage imageNamed:@"RecordNormal"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[[array objectAtIndex:2] setSelectedImage:[[UIImage imageNamed:@"RecordSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

}

tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.tabBar.translucent=false;
[self customizeTabBar];
[self customizeBarButtonsItems:tabBarController.tabBar.items];
for(UITabBarItem * tabBarItem in tabBarController.tabBar.items){
    //tabBarItem.title = @"";
    tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
}

Ответ 5

Если вы создаете ваш navigationController программно, вы увидите те же симптомы из-за слишком позднего вызова viewDidLoad. При переопределении init в ваших дочерних контроллерах представления ваши иконки будут отображаться правильно.

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    self.tabBarItem = UITabBarItem(title: "Settings", image: UIImage(named: "gear"), tag: 1)
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
}

Удачного кодирования!