上下文:
我正在开发一个应用程序,用于维护联系人列表及其记录ID,以供自己参考。
当用户需要更改与应用内特定联系人关联的号码时,我正在尝试显示ABPersonViewController,以便用户可以从AB中的联系人中选择新号码。
问题: 问题是打开的ABPersonViewController从屏幕顶部一直开始,好像它不知道顶部有导航栏。
因此,ABPersonViewController屏幕的顶部部分(人物图像的顶部和名称的顶部)位于导航栏下方。
理想情况下,我希望它看起来像这样,但不是在编辑模式下:http://developer.apple.com/library/ios/documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Art/person_view.jpg
我还想在导航栏的右上角添加一个“取消”按钮。试图将其添加为条形按钮也不起作用。
代码: 这就是我将ABPersonViewController添加到navigationController的方法:
ABPersonViewController *personViewController = [[ABPersonViewController alloc] init];
personViewController.personViewDelegate = self;
personViewController.displayedPerson = person;
[self.m_circleNavController pushViewController:personViewController animated:YES];
[personViewController release];
这里的self
是UIVIewController
。
m_circleNavController
是UIVIewController所属的UINavigationController。
我尝试了这两种显示人物视图的方式,但两者的行为方式相同。
[self.m_circleNavController pushViewController:personViewController animated:YES];
[self.navigationController pushViewController:personViewController animated:YES];
我不太确定我做错了什么,或者最好的方法是什么。 我尝试了许多不同的方法来徒劳地显示它。
答案 0 :(得分:1)
视图控制器的行为似乎是在屏幕上边缘上方大约40个像素处开始。
我终于以一种非常奇怪的方式解决了这个问题。在viewcontroller的init函数中,我添加了以下行:
self.view.bounds = CGRectMake(0,-43,320,440);
但仍然不知道为什么会这样发生。我接近截止日期寻找合适的解决方案。
答案 1 :(得分:0)
您好我遇到了与新iOS相同的问题。当我在自定义视图控制器上发生这种情况时,我已经能够通过以下方式纠正它:
if (self.interfaceOrientation != UIInterfaceOrientationPortrait) { // UI is in landscape position
[self.tableView setContentInset:UIEdgeInsetsMake(32,0,0,0)];
} else { // UI is in portrait position
[self.tableView setContentInset:UIEdgeInsetsMake(44,0,0,0)];
}
但是当使用ABPersonViewController时,我不太清楚如何处理这个问题。 希望有人有个主意...