【问题标题】:Weird UI problem when modal view is dismissed关闭模式视图时出现奇怪的 UI 问题
【发布时间】:2009-09-07 12:56:18
【问题描述】:

如下面的屏幕截图所示,我有一个带有一些信息的 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 被“Επιστροφή”按钮(实际上是“返回”)关闭时,持有 tableView 和蓝色 UIButton 的视图被移动到底部几个像素!

有什么可能导致这种情况的帮助吗?

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

【问题讨论】:

    标签: iphone objective-c user-interface uinavigationcontroller


    【解决方案1】:

    通过检查 -viewWillAppear-viewDidAppear-viewWillDisappear-viewDidDisappear 中的视图框架来调试此问题。

    还要检查视图的 autoresizingMask 和父视图的 autoresizesSubviews 属性。

    【讨论】:

    • 您好,感谢您的回答。明天我有时间时会检查视图的框架。我不确定 autoresizingMask 和 autoresizesSubviews。我使用窗口呈现视图...这两个属性应该具有什么值?我想我在 Interface Builder 中也看到了一些选项。应该勾选还是不勾选?
    【解决方案2】:

    我不确定在这里设置导航控制器的价值。您可以将ABUnknownPersonViewController[self presentModalViewController: unknownPersonView]; 一起呈现。如果您这样做是为了使用后退按钮拾取可视导航栏,那么只需将导航栏和按钮添加到未知人员视图即可。

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

    【讨论】:

    • 您好,感谢您的回答。它在 Apple 的文档中明确指出(实际上是在 Important 注释中),需要从导航控制器中调用这种模式视图,如 ABUnknownPersonView Controller 才能正常工作。
    • 不过,invalidname 是对的。这样做的“正确”方法是呈现一个模态视图控制器。您只需使用 UnknownPersonViewController 作为根视图控制器创建一个额外的 NavigationController,并以模态方式显示导航控制器。一个例子是苹果自己的地址簿应用程序,如果你点击按钮添加一个人,就会发生这种情况。
    【解决方案3】:

    好像加了这行:

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

    在我的 viewWillAppear 中:当模式视图控制器被解除时,使视图不移动。但是现在初始位置已经稍微错位到底部但是通过将 IB 中的所有出口移动到顶部来修复它,所以它看起来没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多