我有一个现有的应用程序UIViewController由NIB/XIB发起。
在我接触任何东西之前,XIB文件是在引用一个webview。我删除了它,并在我的UIViewController viewDidLoad方法来创建它的配置和进程池。因此,这个webview现在被添加到我的主目录中。UIViewController他的观点如下:[self.view addSubview:webView];在viewDidLoad方法。
然而,这一变化导致了一个新的问题:UIViewController有时打开一秒UIViewController或QLPreviewController就像这样:
// present second UIViewController
self.secondaryWebViewController = [[SecondaryWebViewController alloc] initWithURL:URL];
[self presentViewController:self.secondaryWebViewController animated:YES completion:nil];
或
// Present QLPreviewController
[self presentViewController:self.previewController animated:YES completion:^{ }];
当这一秒UIViewController或QLPreviewController是被解雇的,我看不出主要UIViewControllerWebView和以前一样(在我从XIB中删除Webview并以编程方式创建/添加它之前),但是我得到了一个空白屏幕。我错过了什么?我要回到主干道UIViewController当这种情况发生的时候。 我注意到,只有当我解散的控制器是UIModalPresentationFullScreen时,我才有一个黑屏幕。当它是UIModalPresentationPopover时,它不会发生。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到这种情况,可能是因为在dismiss模态视图控制器时,主UIViewController的视图层次结构没有正确地重新调整。以下是一些建议来解决这个问题:
webView
对象在UIViewController
的整个生命周期中都有效。你可以在viewWillAppear:
方法中尝试重新添加或刷新webView,以确保它在视图将要显示时是可见的。- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.view addSubview:webView];
// 如果需要,可以在这里重新配置或刷新webView的内容
}
检查视图层次和约束:有时候,视图被隐藏可能是由于自动布局约束问题或者视图层级混乱导致的。确保webView有正确的约束(如果使用Auto Layout),并且没有被其他视图遮挡。
调试视图层次:使用Xcode的Debug View Hierarchy工具来检查在黑屏发生时的视图层次结构。这可以帮助你确定webView是否还在,并且位置、大小是否正确。
Modal Presentation Style:既然你提到只有在全屏模式下才出现问题,考虑调整modal presentation样式,或者在dismiss之前手动调整webView的状态,比如在dismiss回调里强制更新主界面的视图。
[self dismissViewControllerAnimated:YES completion:^{
[self.view setNeedsLayout];
[self.view layoutIfNeeded];
}];
内存管理:确保没有意外释放了webView
对象或者其父视图。检查是否有地方错误地调用了removeFromSuperview
或者过度释放了相关对象。
Web内容加载:确认web内容是否已经正确加载。有时,WebView可能因为加载失败而显示为空白。你可以通过代理方法监控加载状态并做相应处理。
如果以上建议都不能解决问题,可能需要更详细的代码审查或进一步的调试信息来定位问题所在。