gpt4 book ai didi

ios - presentViewController 使黑屏

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:03:10 27 4
gpt4 key购买 nike

我一直在寻找我的问题的解决方案,但其中大部分对我来说都是无用的,因为几乎所有这些都是关于在 IB 中犯下的错误,我没有在这个项目中使用它。重点:

我有一个使用 Unity 生成的 XCode 项目,我想在 UnityViewController 之上添加另一个带有 UIWebView 的 View Controller 。由于 Unity 生成的项目不使用 UINavigationController,因此我无法使用 pushViewController 并决定使用 presentViewController:... 代替。问题是,当我尝试这样做时,我只看到黑屏。如果我调用 dismissViewController,我会再次看到 UnityViewController,这样就可以正常工作。问题是,presentViewController 没有添加我的 vc View 。我使用断点来查看是否正在调用 viewDidLoad 而不是。 -(void)loadView 和 -(UIView *)view 也是如此。这是我用来添加 vc 的代码:

WebViewController *webViewController = [[WebViewController alloc] init];
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:webViewController animated:YES];

我检查了 webViewController 是否为 nil,事实并非如此。那个rootViewController就是UnityViewController,我百分百确定。

这是 Unity 生成的代码,用于创建 View 层次结构:

_mainDisplay = [[DisplayManager Instance] mainDisplay];
[_mainDisplay->window makeKeyAndVisible];

static bool _ClassInited = false;
if(!_ClassInited)
{
AddOrientationSupportDefaultImpl([UnityViewController class]);
_ClassInited = true;
}

_viewController = [[UnityViewController alloc] init];
_viewController.wantsFullScreenLayout = TRUE;
_viewController.view = _mainDisplay->view;

然后在另一种方法中:

[_mainDisplay->window addSubview: _mainDisplay->view];
_mainDisplay->window.rootViewController = _viewController;
[_mainDisplay->window bringSubviewToFront: _mainDisplay->view];

黑屏会不会是缺少UINavigationController导致的?

这可能与我的问题无关,但我还有一个菜单需要在我的应用程序中始终可见,我将其设为 keyWindow 的 subview 。

附言我还尝试展示一个 UINavigation Controller ,并将 webViewController 设置为 rootvc,但我得到的只是一个带有导航栏的黑屏。

附言我在我的 Unity 项目中使用 Vuforia,因此我无法在模拟器中运行它。

编辑:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor whiteColor];

UIImageView *icon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Icon.png"]];
icon.frame = CGRectMake(50, 50, 200, 200);
[self.view addSubview:icon];
}

断点在我更改 backgroundColor 的那一行。它没有被调用。

编辑2:通过断点,我发现我的 WebViewController 子类的任何方法都没有被调用,甚至 init 也没有。就像 xcode 忽略了那个类的存在。我只编辑了 viewDidLoad 方法,其余部分与默认的 UIViewController 子类模板相同。 WebViewController.h 也没有变化。

编辑3:现在修好了。将 WebViewController 类名称更改为不同的名称会有所帮助。我能想到的唯一合乎逻辑的解释是 WebViewController 之前已经在其中一个源文件中实现,但我自己没有这样做。可能在其中一个图书馆中(?)。无论如何,感谢您的帮助,我接受了 GuillaumeA 的回答,因为多亏了他的建议,我发现这实际上不是 View 的问题。

最佳答案

使用您提供的信息很难知道您的问题出在哪里。

这可能只是一种正常行为。在创建 UIViewController 的新实例时(我假设您的 WebViewController 是一个子类),它会为其创建一个空白根 UIView

“空白”是指 View 没有 subview ,也没有背景色 (nil)。这会使 View 显示为黑色,并且 - 由于某种原因 - 阻止 View 在显示时进行动画处理。

要测试我的假设是否正确,请尝试更改 WebViewController View 的背景颜色:

WebViewController *webViewController = [[WebViewController alloc] init];
webViewController.view.backgroundColor = [UIColor redColor];
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:webViewController animated:YES];

注意:presentModalViewController:animated: 现已在 iOS 6.0 中弃用,因此您可能希望将其替换为 presentViewController:animated:completion::

[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:webViewController animated:YES completion:nil];

关于ios - presentViewController 使黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16940361/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com