这是基于this issue in React-Native的更深入的答案
在 Xcode 的左侧边栏中,选择“Project Manger”(文件夹图标)以查看文件结构。
您要查找的特定文件夹位于:
[YourAppName] > 库 > React.xcodeproj > React > 视图
RCTNavItem.h
#import "RCTComponent.h"
@interface RCTNavItem : UIView
//add this line:
@property (nonatomic, assign) BOOL showTabBar;
RCTNavItemManager.m
@implementation RCTNavItemManager
RCT_EXPORT_MODULE()
- (UIView *)view
{
return [RCTNavItem new];
}
// add this line:
RCT_EXPORT_VIEW_PROPERTY(showTabBar, BOOL)
RCTNavigator.m
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(__unused UIViewController *)viewController
animated:(__unused BOOL)animated
{
// Add these two lines:
RCTWrapperViewController *thisController = (RCTWrapperViewController *)viewController;
navigationController.tabBarController.tabBar.hidden = !thisController.navItem.showTabBar;
我不需要将 propTypes 添加到 NavigatorIOS.ios.js 或 TabBarIOS.ios.js
为了让这一切正常工作,每个选项卡似乎都需要有自己的 NavigatorIOS 组件。当我让选项卡简单地显示一个屏幕时 - (void)navigationController:(UINavigationController *)navigationController... 方法不会被调用。这对我来说不是问题,因为使用 navigationBarHidden: true 可以轻松隐藏导航栏。
就我而言,我有一个 TabNav > HomeNav > HomeScreen
在 HomeNav 中传递 showTabBar 属性:
render() {
return (
<NavigatorIOS
style={styles.container}
client={this.props.client}
initialRoute={{
title: 'Home',
component: HomeScreen,
navigationBarHidden: true,
showTabBar: false,
passProps: { ...},
}}/>
);
}
}
我希望这对某人有帮助!