Почему в моей панели вкладок отсутствует фон?

В некоторых случаях на моей панели вкладок на 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"]];