ABPeoplePickerNavigationController“Groups”查看导航控制器

时间:2012-11-13 00:25:59

标签: iphone ios uinavigationbar abpeoplepickerview

我在应用代表的application:didFinishLaunchingWithOptions:方法中使用此代码在我的应用中使用自定义导航栏外观:

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

但是,当我提出ABPeoplePickerNavigationController(允许选择联系人填充新电子邮件的收件人:字段)时,此外观会中断,因为系统使用额外的高UINavigationBar时由于系统设置了prompt上的UINavigationItem属性(“选择要发送邮件的联系人”),因此显示视图。

修复是添加此代码:

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

看起来像这样:

Fixed view of contacts list

但是,当您从初始视图中点按群组按钮时,此小修补程序无效。由于超高的导航栏,它仍然看起来很破碎:

Broken view of extra tall Navigation Bar after tapping Groups button

任何想法控制器名称对于该视图是什么(所以我可以应用与上面相同的排除),或其他方法来解决这个问题?

2 个答案:

答案 0 :(得分:0)

我现在正打这个......运气好吗?我正在考虑尝试通过ABPeoplepickerNavigationControllers视图控制器进行交互并应用appearanceWhenContainedIn方法......

答案 1 :(得分:0)

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

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

此处的解决方案(iOS5 UINavigationBar background image issues when prompt is shown)建议使用可调整大小的背景图像作为导航栏。

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

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

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