【发布时间】:2015-06-13 12:32:38
【问题描述】:
我有一个 UINavigationController 和一个 UIViewController 设置为它的 rootController,它在它的 UIView 上包含一个背景,使用 navBar 下的一个图像集。然后我将一个新的 UIViewController 推到导航控制器上,当按下后退按钮时,前一个控制器看起来不同。使用可视化调试器,我可以看到 self.view 已完全移至导航栏下方,之前它位于顶部。我不知道为什么会发生这种情况,并且一直在绞尽脑汁
-(void)pushIPhoneMessagingContactsController:(MessageContactsViewController *)contactsController{
self.selectorView.hidden = YES;
[self.navigationController pushViewController:contactsController animated:YES];
}
在 RootViewController (iPhoneMessagingNotificationsController)
-(void)viewWillAppear:(BOOL)animated{
self.selectorView.hidden = NO;
[[[self navigationItem] leftBarButtonItem] setTintColor:[UIColor blackColor]];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
if ([_displayType intValue] == MESSAGES_SHOWING) {
[self.notificationsViewController.view removeFromSuperview];
[self.contentView addSubview:_messagesViewController.view];
} else {
[self.messagesViewController.view removeFromSuperview];
[self.contentView addSubview:_notificationsViewController.view];
}
}
【问题讨论】:
-
其他一些代码正在影响视图。您是否在过渡期间隐藏或更改了任何会影响顶部布局、导航栏、插图或约束的内容?请显示任何相关代码,例如
viewWillAppear。要回答您的问题,我们需要更多详细信息来了解 selectorView 是什么,以及它在视图层次结构中的显示方式/位置。 -
selectorView 是位于导航栏顶部的视图,允许用户在两个子视图之间切换。它是在设置 rootViewController 之后添加的,当其他 Controller 被推送时它必须被隐藏。 viewWillAppear 中有一些代码我将添加到问题中。
-
我已经在 viewWillAppear 中测试了视图框架,它显示视图变为 (0,64,320,504) 而最初是 (0,0,320,504) 所以有些东西正在修改它
-
为了进一步混淆这个问题,如果我创建一个带有 redBackground 的简单 UIViewController 作为测试并推送它,则不会发生此问题,就好像推送的控制器是导致这个问题,虽然这不应该影响堆栈上其他控制器的布局,但我会想到?
标签: ios uinavigationcontroller