解除模态视图时出现奇怪的UI问题

时间:2009-09-07 12:56:19

标签: iphone objective-c user-interface uinavigationcontroller

如下面的屏幕截图所示,我有一个带有一些信息的UITableView,在选择一行时,会调用ABUnknownPersonViewController。为了能够解散它并返回到UITableView,我有这个代码:

ABUnknownPersonViewController *unknownPersonView = [[[ABUnknownPersonViewController alloc] init] autorelease];

[unknownPersonView setUnknownPersonViewDelegate:self];
[unknownPersonView setDisplayedPerson:personRecord];
[unknownPersonView setAllowsAddingToAddressBook:YES];

UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:@"Επιστροφή" style:UIBarButtonItemStylePlain
                                                                 target:self action:@selector(goBackToView)];

unknownPersonView.navigationItem.title = @"Προσθήκη στις επαφές";
unknownPersonView.navigationItem.leftBarButtonItem = anotherButton;

navigationController = [[[UINavigationController alloc] initWithRootViewController:unknownPersonView] autorelease];
//navigationController = [[[UINavigationController alloc] initWithRootViewController:self] autorelease];
//self.navigationItem.rightBarButtonItem = anotherButton;

[self presentModalViewController:navigationController animated:YES];
} // didSelectRowAtIndexPath ends here

- (IBAction)goBackToView {
    [self dismissModalViewControllerAnimated:YES];

}
- (void)unknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonView didResolveToPerson:(ABRecordRef)person {
//  CallerIDAppDelegate *delegate = (CallerIDAppDelegate *)[[UIApplication sharedApplication] delegate];
    [navigationController dismissModalViewControllerAnimated:YES];


}

问题(正如你所看到的)是当ABUnknownPersonViewController被“Επιστροφή”按钮解散时,实际上是“Back”,持有tableView和蓝色UIButton的视图被移动几个像素到底部!

对可能导致此问题的任何帮助?

Screenshot http://dl.getdropbox.com/u/1237004/problem.jpg

3 个答案:

答案 0 :(得分:0)

通过检查-viewWillAppear-viewDidAppear-viewWillDisappear-viewDidDisappear中的视图框架进行调试。

同时检查视图的autoresizingMask和父视图的autoresizesSubviews属性。

答案 1 :(得分:0)

我不确定在这里看到设置导航控制器的价值。您可以使用ABUnknownPersonViewController;来展示[self presentModalViewController: unknownPersonView]。如果您是为了通过后退按钮选择可视导航栏,那么只需在未知人员视图中添加导航栏和按钮。

这似乎是一个混合的比喻,即创建UINavigationController但不使用其常用的导航方法(例如pushViewController:animated:popViewControllerAnimated:),而是使用从{继承的模态方法{1}}。

答案 2 :(得分:0)

似乎添加了这一行:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];

在我的viewWillAppear中:当模态视图控制器被关闭时,视图不会移动。然而现在初始位置已经略微错位到底部但通过将IB中的所有外部移动到顶部来修复它,所以看起来没问题。