1

如何将 RCTRootView 作为子视图添加到应用程序 RootViewController。

这就是我想要实现的。我有一个 iOS 本机应用程序,可以将一些 OpenGLES 内容呈现到视图上。它显示设备摄像头馈送并跟踪用户面部并在其上显示一些可视化(很像 snapchat AR 过滤器)。这一切都很好,我也有原生的 iOS UIKit 元素。我想在这个摄像头提要上覆盖一些 react-native UI 元素(删除 UIKit 组件)并实现 UI 功能。

所以我想在 react-native (RCTRootView) 下面有相机馈送(即:打开 gl 视图)。大多喜欢这个链接。我几乎做到了,但有一些烦人的布局问题。

默认 AppDelegate.m 实现

NSURL *jsCodeLocation;
jsCodeLocation = [[RCTBundleURLProvider sharedSettings]
jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];

RCTRootView *rootView = [[RCTRootView alloc] 
initWithBundleURL:jsCodeLocation moduleName:@"AwesomeProject" initialProperties:nil launchOptions:launchOptions];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];

在此处输入图像描述

尝试将其添加为子视图会导致此

...
//  rootViewController.view = rootView;
[rootViewController.view addSubview:rootView];
...

在此处输入图像描述

灵活的宽度和高度导致了这个

...
//  rootViewController.view = rootView;
rootView.sizeFlexibility = RCTRootViewSizeFlexibilityWidthAndHeight;
[rootViewController.view addSubview:rootView];
...

在此处输入图像描述

在我看来,这可能是布局问题?但我会以错误的方式解决这个问题吗?欢迎任何帮助。

ps:这就是带有 react-native UI atm 的 AR 相机馈送视图的样子。 在此处输入图像描述

pps:如果我不将 RCTRootView 添加为子视图,那么它将始终在后台(即摄像头馈送将始终位于 react-native UI 视图的顶部)

4

1 回答 1

1

我遇到了类似的问题,发现以下组合可以满足我的喜好:

// Do *NOT* set reactView.sizeFlexibility

reactView.bounds = [[UIScreen mainScreen]bounds]];

reactView.layer.anchorPoint = CGPointMake( 0, 0 );

警告:我在 Ignite 上运行,所以不知道这是否适用于 flexbox。

于 2016-08-14T01:20:54.950 回答