У меня такая же проблема.Я пытался добавить градиентный слой на панель навигации со стилем UIBarStyleBlackTranslucent для эффекта стекла.После поиска в Интернете и множества экспериментов я не нашел правильного решения этой проблемы.Наконец, я придумал следующую работу:
CAGradientLayer *yourGradient = ...
// Нужны два дополнительных слоя для имитации стиля UIBarStyleBlackTranslucent
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = CGRectMake(0, 0, 320, 44);
NSMutableArray *cgColors = [[NSMutableArray alloc] init];
[cgColors addObject:(id)[[UIColor colorWithRed:0.0
green:0.0
blue:0.0
alpha:0.2] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.0
green:0.0
blue:0.0
alpha:0.6] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.0
green:0.0
blue:0.0
alpha:0.5] CGColor]];
gradient.colors = cgColors;
CALayer *layer = [CALayer layer];
_layer.frame = CGRectMake(0, 22, 320, 22);
_layer.backgroundColor =[[UIColor colorWithRed:0.0
green:0.0
blue:0.0
alpha:0.2] CGColor];
// Это необходимо для кнопок панели навигации
[rootController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];
// Добавление слоев к первому подслою слоя панели навигации
[[[rootController.navigationBar.layer sublayers] objectAtIndex:0] insertSublayer:yourGradient atIndex:0];
// После добавления слоя градиента стиль UIBarStyleBlackTranslucent исчезает
//с панели (но не с кнопок)
// Поэтому для имитации необходимо следующее
[[[rootController.navigationBar.layer sublayers] objectAtIndex:0] insertSublayer:gradient atIndex:1];
[[[rootController.navigationBar.layer sublayers] objectAtIndex:0] insertSublayer:layer atIndex:2];
Вы также можете добавить некоторые границы к своему слою, так как границы кажутсяисчезнуть.