子视图控制器 <JWPlayerKit.JWplayerViewController> 应该有父视图控制器 <RNSScreen> 但实际父级是 <UIViewContr

Posted

技术标签:

【中文标题】子视图控制器 <JWPlayerKit.JWplayerViewController> 应该有父视图控制器 <RNSScreen> 但实际父级是 <UIViewController>【英文标题】:Child view controller <JWPlayerKit.JWplayerViewController> should have parent view controller <RNSScreen> but actual parent is <UIViewController> 【发布时间】:2021-09-20 02:22:25 【问题描述】:

我正在尝试使用库 react-native-jw-media-player@0.2.0-beta.2 将 JWPlayer SDK v4 实现到 React Native ios 应用程序中。

如果播放器屏幕是应用程序加载时显示的初始屏幕,则播放器嵌入没有任何问题,但是当导航离开和返回播放器屏幕时(使用 react-navigation 选项卡),将引发以下异常:

Exception thrown while executing UI block: child view controller:<JWPlayerKit.JWPlayerViewController: 0x7fd744bab800> should have parent view controller:<RNSScreen: 0x7fd6db935310> but actual parent is:<UIViewController: 0x7fd745a057a0>

我是移动开发的新手(来自 React)并且已经花费了无数小时试图解决这个问题,但我没有得到任何帮助,非常感谢!

【问题讨论】:

一个名为 RNSScreen 的类预计将作为 ViewController 强加。对你没有多大帮助,但误导性选择的名称方案必须经常导致误导性的编码错误。在 iOS 上,屏幕不是视图可能会对您有所帮助。 您最终找到解决方案了吗?我有同样的问题吗? @Cheyne 我在下面添加了我的解决方案。希望对您有所帮助! 【参考方案1】:

虽然它不是完全修复,但我设法通过创建隐藏的 &lt;JWPlayer&gt; 组件并将其添加到 App.js 来解决此问题。现在&lt;JWPlayer&gt; 的任何后续实例都可以按预期工作。

这是隐藏的播放器组件:

export default function HiddenPlayer() 
  const player = useRef(null);

  return (
    <View>
      <JWPlayer
        ref=player
        style=styles.video
        config=...config
      />
    </View>
  );


const styles = StyleSheet.create(
  video: 
    display: 'none',
  ,
);

【讨论】:

以上是关于子视图控制器 <JWPlayerKit.JWplayerViewController> 应该有父视图控制器 <RNSScreen> 但实际父级是 <UIViewContr的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 将子视图添加到子视图控制器视图

子视图与子视图控制器 z 位置

从父视图控制器再次推送时,子视图框架发生变化

如何在目标 c 中从其他子视图控制器导航子视图控制器

子视图控制器的视图忽略自动布局约束

删除子视图和视图控制器?