Ios React Native:如何动态计算自定义本机UITextView高度
我正在开发一个现有的iOS应用程序,其中我使用React Native添加了新功能。 到目前为止效果很好。现在,我必须使用已经开发的自定义本机Swift UITextView子类。正在从API获取文本。因此UITextView的大小应该是动态的 在React Native方面,它如下所示:Ios React Native:如何动态计算自定义本机UITextView高度,ios,swift,react-native,react-native-native-ui-component,Ios,Swift,React Native,React Native Native Ui Component,我正在开发一个现有的iOS应用程序,其中我使用React Native添加了新功能。 到目前为止效果很好。现在,我必须使用已经开发的自定义本机Swift UITextView子类。正在从API获取文本。因此UITextView的大小应该是动态的 在React Native方面,它如下所示: import { requireNativeComponent } from 'react-native'; export const NativeTextView = requireNativeCompo
import { requireNativeComponent } from 'react-native';
export const NativeTextView = requireNativeComponent('RNNativeTextView');
export default function FooView(props: FooViewProps) {
return (
<View
style={{
...props.style,
flexDirection: 'row',
flexWrap: 'wrap',
backgroundColor: 'red',
margin: Dimensions.generalPadding * 2,
}}
>
<NativeTextView
text={props.viewModel.aboutMeText}
textColorString={Colors.red}
backgroundColor={Colors.black}
style={{
...regularTextStyle,
width: "100%",
flexDirection: 'row',
}} />
</View>
)
}
#导入
#进口
@接口RCT_外部模块(RNNativeTextViewManager、RCTViewManager)
RCT\u导出\u视图\u属性(文本,NSString)
RCT\u导出\u视图\u属性(textColorString、NSString)
+(BOOL)requiresMainQueueSetup{返回是;}
@结束
像这样,根本不显示文本视图。这是因为NativeTextView的高度为0。如果为样式设置静态固定高度,则NativeTextView将按预期进行渲染。但是我想要的是一个动态的高度,当然这取决于文本的长度
试图在dev文档中找到解决方案,但没有发现任何真正有用的东西。我错过了什么?如何计算此UITextView的高度是一种良好且有效的方法
@objc(RNNativeTextView)
class NativeTextView: UITextView {
... (native implementation)
}
import Foundation
@objc(RNNativeTextViewManager)
class RNNativeTextViewManager: RCTViewManager {
override func view() -> UIView! {
let textView = NativeTextView(frame: CGRect(x: 0, y: 0, width: .zero, height: .zero))
return textView
}
}
#import <React/RCTBridgeModule.h>
#import <React/RCTViewManager.h>
@interface RCT_EXTERN_MODULE(RNNativeTextViewManager, RCTViewManager)
RCT_EXPORT_VIEW_PROPERTY(text, NSString)
RCT_EXPORT_VIEW_PROPERTY(textColorString, NSString)
+ (BOOL)requiresMainQueueSetup { return YES; }
@end