我有两种方法可以在应用程序中注册 - 第一种是手动表单,第二种使用facebook数据。
对于第二个选项,我使用Facebook API的回调来获取他们的数据,当进程完成时,我推送到下一个视图控制器。
不同之处在于,在我从完成块中推送新的viewcontroller的情况下,我得到了各种约束警告,而直接推送的视图控制器不会引起任何警告。
为了测试,我尝试在UIView动画中的完成块内推送VC,导致同样的问题。
此代码导致约束错误和混乱的下一页:
[UIView animateWithDuration:1 animations:^{
} completion:^(BOOL finished) {
VCName *enroll = [[VCName alloc]initWithNibName:@"NibName" bundle:nil];
[self.navigationController pushViewController:enroll animated:YES];
}];
此代码完美显示下一个屏幕:
VCName *enroll = [[VCName alloc]initWithNibName:@"NibName" bundle:nil];
[self.navigationController pushViewController:enroll animated:YES];
更新
如果我在转换的目标视图控制器上运行[self.view layoutIfNeeded]
,布局工作正常。不知道为什么只有在从块中推出VC时才需要这样做。
答案 0 :(得分:1)
只是预感,但是...... self.navigationController没有固定值 - 它是一个方法调用,它在层次结构中搜索最近的navigationController。也许这个过程在执行块的上下文中不起作用?
尝试在块外部创建变量(我认为它需要具有__block前缀),将其设置为self.navigationController的结果,然后在块内使用它。这样,您可以精确地确定块捕获的引用。