3

我在我的应用程序中使用自定义导航栏外观,并在 App Delegate 的application:didFinishLaunchingWithOptions:方法中使用此代码:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navBar.png"] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundColor:[UIColor clearColor]];

但是,当我呈现一个(以允许选择联系人以填充新电子邮件的收件人:字段)时,此外观会中断,因为由于系统设置的属性,在显示此视图时ABPeoplePickerNavigationController系统会使用额外的高度(“选择要邮寄的联系人”)。UINavigationBarpromptUINavigationItem

解决方法是添加以下代码:

[[UINavigationBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setBarStyle:UIBarStyleBlack];

看起来像这样:

修复了联系人列表的视图

但是,当您从初始视图中点击“”按钮时,这个小技巧不起作用。由于超高的导航栏,它看起来仍然破碎:

点击组按钮后超高导航栏的破损视图

任何想法该视图的控制器名称是什么(因此我可以应用与上述相同的排除),或解决此问题的另一种方法?

4

2 回答 2

0

我现在才打这个..运气好不好解决?我正在考虑尝试通过 ABPeoplepickerNavigationControllers 视图控制器进行交互并应用外观WhenContainedIn 方法...

于 2013-01-21T16:42:37.697 回答
0

我也一直在与此作斗争,但认为我已经拼凑出一个解决方案。

组选择视图是其他一些(我不知道,可能是私有的)类,因此我们不能像您为 ABPeoplePickerNavigationController 所做的那样,通过外观代理时包含的方法指定异常样式。相反,我们应该尝试解决最初的问题,即在显示提示并且导航栏很高时自定义背景图像无法正确呈现。

此处的解决方案(显示提示时出现 iOS5 UINavigationBar 背景图像问题)建议为导航栏使用可调整大小的背景图像。

这几乎对我有用,但是我使用的背景图像包括导航栏下方的阴影,并且在显示提示时没有正确调整大小。相反,我必须使用没有阴影的可调整大小的背景图像,然后单独指定阴影图像。

UINavigationBar* navigationBar = [UINavigationBar appearance];
[navigationBar setBackgroundImage:[[UIImage imageNamed:@"TopBarBackgroundNoShadow"] resizableImageWithCapInsets:UIEdgeInsetsMake(3, 0, 3, 0)]
                forBarMetrics:UIBarMetricsDefault];
[navigationBar setShadowImage:[UIImage imageNamed:@"TopBarShadowResize"]];

使用这种方法消除了对任何异常样式的需求,并且在 ABPeoplePickerNavigationController 和组选择视图中以及在标准高度下看起来都很好。

于 2013-09-11T21:28:54.393 回答