3

我正在开发一个现有的 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 的高度是一种好的和有效的方法?

4

0 回答 0