我正在开发一个现有的 iOS 应用程序,我在其中添加了 React-Native 的新功能。到目前为止效果很好。现在我必须使用已经开发的自定义原生 Swift UITextView 子类。文本正在从 API 中获取。所以 UITextView 的大小应该是动态的。
在 React-Native 方面,它看起来像这样:
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>
)
}
在原生 iOS 端:
@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
像这样根本没有显示 TextView。之所以如此,是因为 NativeTextView 的高度为 0。如果我将静态固定高度设置为样式,则 NativeTextView 将按预期进行渲染。但我想要的是一个动态高度,当然这取决于文本长度。
试图在开发文档上找到解决方案,但没有发现任何真正有用的东西。错过了什么?如何计算这个 UITextView 的高度是一种好的和有效的方法?