当项目使用自动布局时,导航控制器无法在 iOS 7 中推送视图控制器
Posted
技术标签:
【中文标题】当项目使用自动布局时,导航控制器无法在 iOS 7 中推送视图控制器【英文标题】:Navigation controller can not push view controller in iOS 7 when project using autolayout 【发布时间】:2015-07-01 08:24:30 【问题描述】:现在在我的项目中,我遇到了自动布局的问题。
在 ios 8 中:它仍然运行良好。
但是在 iOS 7 中:它推送到视图并且无法加载视图的内容。在导航中,我看到它更改了标题。我猜自动布局是错误的原因。
代码:
MyViewController * viewcontroller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[employeeListVC.view updateConstraintsIfNeeded];
[self.navigationController pushViewController:employeeListVC animated:YES];
请帮我解决它。非常感谢。
【问题讨论】:
检查你的控制器是否嵌入到导航控制器中。 我检查了导航控制器。它不是零 【参考方案1】:UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main"
bundle: nil];
MyViewController *controller = [mainStoryboard instantiateViewControllerWithIdentifier:@"MyViewController"];
[self.navigationController pushViewController:controller animated:YES];
【讨论】:
【参考方案2】:我猜自动布局不是原因。一种可能的情况是MyViewController
未嵌入UINavigationController
。
检查self.navigationController
是否为nil
。
来自控制台的错误消息将很有帮助(如果存在)。
【讨论】:
没有错误,只是无法加载视图的内容。self.navigationController
不是nil
这是显示日志po self.navigationController <UINavigationController: 0x7fcd5f61bf80>
【参考方案3】:
使用 Segue 代替导航控制器。根据我的个人意见,那个更好。
步骤: 1. 嵌入你的视图控制器[初始视图控制器必须嵌入导航控制器]
为你的 segue 提供一个名称标识符。
在您的活动中编写代码
[self performSegueWithIdentifier:@"SegueBlockedContacts" sender:self];
实现 prepareForSegue 方法。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"SegueBlockedContacts"])
BlockedContactTableVC *blockedContactVC = segue.destinationViewController;
[blockedContactVC.blockedContacts removeAllObjects];
blockedContactVC.blockedContacts = blockedContacts;
blockedContactVC.myDelegate = self;
就是这样。
【讨论】:
我在视图控制器的日志框架上进行了测试,我看到它仍然正常工作,导航正确,视图框架正确。但是,由表格视图组成的内容视图可以不显示。以上是关于当项目使用自动布局时,导航控制器无法在 iOS 7 中推送视图控制器的主要内容,如果未能解决你的问题,请参考以下文章