无法从UINavigationBar中删除阴影

时间:2012-12-29 06:06:57

标签: objective-c ios uinavigationbar respondstoselector

我无法在iOS 6上因某种原因从我的UINavigationBar中删除阴影。为什么这不起作用?我尝试了以下内容:

if ([[UINavigationBar appearance]respondsToSelector:@selector(setShadowImage:)]){
    [[UINavigationBar appearance]setShadowImage:[[UIImage alloc] init]];
}

if ([[UINavigationBar class]respondsToSelector:@selector(setShadowImage:)]){
    [[UINavigationBar appearance]setShadowImage:[[UIImage alloc] init]];
}

3 个答案:

答案 0 :(得分:3)

你必须在NavigationBar实例上做...

if ([navigationBarInstance respondsToSelector:@selector(setShadowImage:)]){
    [navigationBarInstance setShadowImage:[[UIImage alloc] init]];
}

编辑: 如果您出于某种原因确实需要对执行检查。这将有效:

if ([UINavigationBar instancesRespondToSelector:@selector(setShadowImage:)]) {
}

答案 1 :(得分:2)

这让我感到难过,直到我读完文档!

注意: 要显示自定义阴影图像,还必须使用setBackgroundImage:forBarMetrics:方法设置自定义背景图像。如果使用默认背景图像,则无论此属性的值如何,都将使用默认阴影图像。

答案 2 :(得分:1)

Mike Pollard 没错。

要删除iOS 6上UINavigationBar下面的阴影,除了将阴影图像设置为空白UIImage之外,还需要设置自定义背景图像。

<强> CustomViewController.m

- (void)viewDidLoad
{
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Background"] forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
}

在上面的例子中,“Background”将是项目中的PNG图像。