React Native iOS NavigatorIOS标题字体

时间:2016-01-23 14:04:00

标签: ios react-native

我目前正在开发一个React Native,我想更改NavigatorIOS标题的字体,我发现了一些有希望的链接:Github issueStack Overflow。但遗憾的是,两者都没有帮助。

我目前在AppDelegate.m中有这段代码

[[UINavigationBar appearance] setTitleTextAttributes:@{
 NSFontAttributeName : [UIFont fontWithName:@"Avenir-Light" size:22.0],
 NSForegroundColorAttributeName : [UIColor whiteColor]
}];

这也不会从一开始就给出NavigatorIOS的字体改变标题栏的字体。

2 个答案:

答案 0 :(得分:0)

您将此代码放在AppDelegate

最好放入一个应该从任何js类调用的RCT_EXPORT_METHORD

在AppDelagete.h中

import BridgeModule.h
Add RCTBridgeModule protocol

在AppDelegate.m

Add:  RCT_EXPORT_MODULE() below implementation
@implementation AppDelegate
RCT_EXPORT_MODULE()

添加此新功能

RCT_EXPORT_METHOD(updateNavigationBar){

    [[UINavigationBar appearance] setTitleTextAttributes:@{
    NSFontAttributeName : [UIFont fontWithName:@"Avenir-Light" size:22.0],
    NSForegroundColorAttributeName : [UIColor whiteColor]

}];

}

js的变化

添加以下行

var AppDelegate = require('NativeModules').AppDelegate;

someJSFunction{

    AppDelegate.updateNavigationBar();

}

这将有效。 (代码只是输入这里)

答案 1 :(得分:0)

我不相信Rahul发布的答案会有效,因为React Native会对导航栏外观的编码方式进行更改。

我做了一个小补丁,可以让你的代码工作。我可以将此提交给React Native,但还没有决定:

--- a/node_modules/react-native/React/Views/RCTWrapperViewController.m
+++ b/node_modules/react-native/React/Views/RCTWrapperViewController.m
@@ -115,9 +115,11 @@ static UIView *RCTFindNavBarShadowViewInView(UIView *view)
     bar.barTintColor = _navItem.barTintColor;
     bar.tintColor = _navItem.tintColor;
     bar.translucent = _navItem.translucent;
-    bar.titleTextAttributes = _navItem.titleTextColor ? @{
-      NSForegroundColorAttributeName: _navItem.titleTextColor
-    } : nil;
+    if (_navItem.titleTextColor != nil) {
+        NSMutableDictionary *newAttributes = bar.titleTextAttributes ? bar.titleTextAttributes.mutableCopy :  [NSMutableDictionary new];
+        [newAttributes setObject:_navItem.titleTextColor forKey:NSForegroundColorAttributeName];
+        bar.titleTextAttributes = newAttributes;
+    }

     RCTFindNavBarShadowViewInView(bar).hidden = _navItem.shadowHidden;

使用此补丁,您应该能够执行以下操作(Swift):

 UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: UIFont(name:"Avenir-Light", size: 22.0) as Any]