NavigationBar setShadowImage并不总是有效

lsd*_*ies 5 iphone uinavigationbar uiimage ios6

我正在尝试在表视图中为导航栏设置自定义阴影图像,但它仅在某些视图中显示.我创建了一个超类来为我的表视图设置样式.

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Set navigation bar background
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigationbarbackground.png"] forBarMetrics:UIBarMetricsDefault];

    // Set navigation bar shadow imag
    [self.navigationController.navigationBar setShadowImage:[UIImage imageNamed:@"navigationbarshadow.png"]];
Run Code Online (Sandbox Code Playgroud)

在我启动我的应用程序时看到的视图中,没有显示阴影.但是当我触摸导航栏中的[+]按钮打开我的" 添加新项目 "表格视图时,它确实会显示阴影.

有人能指出我在正确的方向吗?

小智 9

你需要backgroudImage为UINavigationBar 设置自定义,然后shadowImage才能工作.


Tie*_*eme 7

外观代理应该工作.

只需在启动时调用它(例如在AppDelegate中).

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{ 
    [self customizeAppearance];
    return YES;
}

- (void) customizeAppearance 
{
    // Set the background image for *all* UINavigationBars
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationbarbackground"] forBarMetrics:UIBarMetricsDefault];

    // Set the shadow image for *all* UINavigationBars
    [[UINavigationBar appearance] setShadowImage:[UIImage imageNamed:@"navigationbarshadow.png"]];  

    //add other appearance stuff here...
}
Run Code Online (Sandbox Code Playgroud)

但是,如果你创建一个包含多个UINavigationController的故事板和一堆segue推送导航控制器,你可能会得到一个腐败的视图控制器结构,这可能是这里的问题.

另一个可能的问题可能是Clip Subviews在您的nib文件或故事板中的某个位置选择导航栏.如果你想要阴影(图像),请确保它已关闭!

ClipSubviews

顺便说一句,如果您使用imageNamed,则不需要包含文件扩展名.

  • 哇谢谢!取消选中剪辑子视图就可以了.我把造型放在一个超级类中的原因是我想把所有的造型都放在一个地方. (2认同)