自定义Segue到UINavigationController显示黑屏

时间:2017-03-06 22:40:36

标签: ios objective-c iphone uiviewcontroller uinavigationcontroller

我正在使用一个简单的自定义segue从我的UIViewController到一个UINavigationController,它将UICollectionViewController保存为根视图控制器。

过渡按预期工作,但我第一次看到黑屏,只有当转换结束时,才会看到UICollectionViewController内容。

故事板:

enter image description here

Segue公司:

enter image description here

这是自定义segue的代码:

- (void)perform {
    UIViewController *sourceViewController = self.sourceViewController;
    UINavigationController *destinationViewController = self.destinationViewController;


    [UIView animateWithDuration:0.25
                          delay:0.0
                        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         destinationViewController.topViewController.view.transform =
                         CGAffineTransformMakeTranslation(0, 0);
                         sourceViewController.view.transform =
                         CGAffineTransformMakeTranslation(-sourceViewController.view.frame.size.width, 0);
                     }
                     completion:^(BOOL finished){
                         [destinationViewController.topViewController.view removeFromSuperview]; // remove from temp super view
                         [sourceViewController presentViewController:destinationViewController animated:NO completion:NULL]; // present VC
                     }];
}

注意:

当我运行一个简单的show segue时,集合视图按原样加载,无黑屏。

知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:2)

好的,让我们通过您的目标视图控制器,因为它看起来是黑色的: 您正在对目标视图控制器进行引用:

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/api/ [NC]
RewriteCond %{REQUEST_URI} !^/index\.php$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]

然后你想用

为它设置动画
UINavigationController *destinationViewController = self.destinationViewController;

所以你对尚未在屏幕上显示的视图进行操作。

然后在动画之后你会这样做:

destinationViewController.topViewController.view.transform = ...

所以你实际上在这里删除UIViewController superview而不是“temp”superview

所以当你进入下一步

[destinationViewController.topViewController.view removeFromSuperview]; // remove from temp super view

这样做你的destinationViewController没有任何视图,所以它显示为黑屏。

要修复它,请复制视图动画,并在加载目标vc时删除。我相信,当我查看你的代码时,你会想到这一点。

所以基本理念是:

[sourceViewController presentViewController:destinationViewController animated:NO completion:NULL]; // present VC

当你使用autolayout yes或no时,代码会有所不同......但你应该从中得到一个基本的想法。

Ruleset Processing

答案 1 :(得分:-2)

当您提交动画时,您将转换当前控制器的视图,结果是离开窗口,或者rootViewController的视图背景颜色为黑色。你看到黑屏'是有道理的。动画持续时间--- 0.25秒