Вы можете создать подкласс UINavigationController, а затем иметь теневой слой для каждой навигации или, если ваша панель всегда видна, просто добавьте тень в UIWindow (только один для всего приложения), а затем сделайте его передним видом каждый раз, когда добавляете подпредставление .
CGColorRef darkColor = [[UIColor blackColor] colorWithAlphaComponent:.5f].CGColor;
CGColorRef lightColor = [UIColor clearColor].CGColor;
CAGradientLayer *newShadow = [[[CAGradientLayer alloc] init] autorelease];
newShadow.frame = CGRectMake(0, self.navigationBar.frame.size.height, self.navigationBar.frame.size.width, 10);
newShadow.colors = [NSArray arrayWithObjects:(id)darkColor, (id)lightColor, nil];
[self.navigationBar.layer addSublayer:newShadow];
Если вы выберете последний случай, переопределите didAddSubview, чтобы сделать слой самым передним:
CALayer *superlayer = self.shadowLayer.superlayer;
[self.shadowLayer removeFromSuperlayer];
[superlayer addSublayer:self.shadowLayer];
Надеюсь, это поможет.