React Native: как динамически рассчитать собственную высоту UITextView
Я работаю над существующим 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?