Почему в моей панели вкладок отсутствует фон?
В некоторых случаях на моей панели вкладок на iOS 7 фон отсутствует. См. Снимок экрана:
![enter image description here]()
Я подклассифицировал UITabBarController и представил мой подкласс таким образом:
[self.navigationController presentViewController:tabBarController animated:NO completion:nil];
Иногда, хотя это редко, фон просто не отображается на моей панели вкладок, и я вижу это прямо через него. Нет полупрозрачного вида - просто прозрачность...
Я отлаживал использование отличного Reveal app и обнаружил, что когда я наблюдаю эту проблему, _UITabBarBackgroundView отсутствует в UITabBar во время выполнения (это должно быть подсмотром UITabBar). И в случае, если это стоит отметить, UIImageView также отсутствует в UITabBar, когда фон отсутствует.
Я в недоумении. Что может привести к тому, что панель вкладок будет отсутствовать в подвале _UITabBarBackgroundView?
Ответы
Ответ 1
Согласно документации, вы никогда не должны использовать контроллер панели вкладок для чего-либо, кроме контроллера корневого представления вашего окна:
При развертывании интерфейса панели вкладок вы должны установить это представление в качестве корня своего окна. В отличие от других контроллеров представлений, интерфейс панели вкладок никогда не должен устанавливаться как дочерний элемент другого контроллера представления.
Неразумно предположить, что представление этого модально, как вы это делаете, в некоторых случаях будет иметь некоторые неожиданные побочные эффекты. Вы когда-нибудь видели эту проблему при использовании панели вкладок в качестве корневого контроллера вашего приложения?
У меня были "невидимые" вкладки, как показано на скриншоте, но только когда я пытался быть умным при настройке фонового изображения, но вы сказали, что этого не происходит с вашим кодом.
Ответ 2
Выстрел в темноте: вы переопределили layoutSubviews без вызова супер?
Ответ 3
Попробуйте добавить это в свой AppDelegate:
[[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"bottombar_iOS7"]];
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"bottomBarSelectionIndicator_iOS7"]];
Ответ 4
Убедитесь, что ваш вызов presentViewController выполняется в основном потоке?
Если нет, вы можете иметь странное поведение, подобное вашему.
Ответ 5
// Below code will work for iOS 6.0,7.0
// Put this code in your appDelegate.m in didFinishLaunchingWithOptions:
//before writing any other code
UIImage *tabBackground = [[UIImage imageNamed:@"tab_bg"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UITabBar appearance] setBackgroundImage:tabBackground];
[[UITabBar appearance] setSelectionIndicatorImage:
[UIImage imageNamed:@"tab_select_indicator"]];
Шаг 1: вам нужно установить желаемый фон - с ios 7 он должен быть полупрозрачным, и каждое изображение вкладки должно быть более тонким по сравнению с ios 6 для лучшего внешнего вида ios 7 - вы можете установить другой набор изображений для ios 6 и ios 7 путем обнаружения по коду
Шаг 2: вам нужно установить изображение при выборе - для согласованного внешнего вида в соответствии с ios 6 и ios 7 используйте разные изображения
Ответ 6
Вы можете попытаться установить фоновое изображение и заставить [tabBar setTranslucent:NO]
посмотреть, что произойдет
Ответ 7
попробуйте установить
tabBarController.tabBar.translucent = NO;
tabBarController.tabBar.barStyle = UIBarStyleBlack;
в ios 7 tabbars по умолчанию полупрозрачны.
Ответ 8
Вот что работало в моем проекте. Добавьте следующий код в конце метода didFinishLaunchingWithOptions:
AppDelegate:
// Avoid appearance proxy and set background image directly
UITabBarController *controller = (UITabBarController *)self.window.rootViewController;
[[controller tabBar] setBackgroundImage:[UIImage imageNamed:@"tab-bar-bg.png"]];