Панель вкладок не показывает значки?
Я прочитал кучу связанных вопросов, я попробовал, что они сказали, ничего не работает. Не знаю, почему. Итак, у меня есть 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)
}
Удачного кодирования!