Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Can';t从UINavigationBar中删除阴影_Objective C_Ios_Uinavigationbar_Respondstoselector - Fatal编程技术网

Objective c Can';t从UINavigationBar中删除阴影

Objective c Can';t从UINavigationBar中删除阴影,objective-c,ios,uinavigationbar,respondstoselector,Objective C,Ios,Uinavigationbar,Respondstoselector,在iOS6上,由于某些原因,我无法从UINavigationBar中移除阴影。为什么这不起作用?我尝试了以下方法: if ([[UINavigationBar appearance]respondsToSelector:@selector(setShadowImage:)]){ [[UINavigationBar appearance]setShadowImage:[[UIImage alloc] init]]; } 您必须在NavigationBar实例上执行此工作 if ([na

在iOS6上,由于某些原因,我无法从UINavigationBar中移除阴影。为什么这不起作用?我尝试了以下方法:

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


您必须在NavigationBar实例上执行此工作

if ([navigationBarInstance respondsToSelector:@selector(setShadowImage:)]){
    [navigationBarInstance setShadowImage:[[UIImage alloc] init]];
}
编辑: 如果出于某种原因确实需要对类执行检查。这将有助于:

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

这让我困惑了一段时间,直到我读了文件

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

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]];
}

在上面的示例中,“背景”将是项目中的PNG图像。

有趣。我会在if中放一个断点,看看它是否被调用。无论是否被调用,我都会通过检查[UINavigationBar类]是否响应外观来修改导航栏的背景,这似乎很好。我就是不能让它为setShadowImage工作。setShadowImage本身就可以很好地工作。如果它没有响应,甚至没有调用选择器,您将如何期望您的更改被应用?这是我的问题-我不确定它为什么没有响应选择器。我发布了两个我尝试过的不同示例,因为我不确定我是否只是在检查错误的对象以获得响应。可能是外观代理没有剪切它。尝试直接设置。
- (void)viewDidLoad
{
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Background"] forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
}