У меня была та же проблема с моим приложением, и я придумал следующее:
в applicationDidFinishLaunching методе я создал функцию для рисования градиента и использовал экземпляр моего UITabBarController для установки правильного градиентного кадра в зависимости от ширины устройства.
- (UIImage *)drawGradientInView:(UITabBarController *) tabBarVC {
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = CGRectMake(CGRectGetMinX(tabBarVC.tabBar.frame), CGRectGetMinY(tabBarVC.tabBar.frame), CGRectGetWidth(tabBarVC.view.frame), CGRectGetHeight(tabBarVC.tabBar.frame));
//set up your gradient
//......
UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return gradientImage;
}
получить экземпляр UITabBarController
UITabBarController *tabVC = (UITabBarController *)[UIApplication sharedApplication].windows.firstObject.rootViewController;
установить свой градиент
[UITabBar appearance].backgroundImage = [self drawGradientInView:tabVC];
Я не уверен, что это правильный подход, но он сработал для меня.