import { HtmlViewBase, View, layout, htmlProperty } from "./html-view-common"; export * from "./html-view-common"; export class HtmlView extends HtmlViewBase { nativeViewProtected: UITextView; public createNativeView() { const view = UITextView.new(); view.scrollEnabled = false; view.editable = false; view.selectable = true; view.userInteractionEnabled = true; view.dataDetectorTypes = UIDataDetectorTypes.All; return view; } get ios(): UITextView { return this.nativeViewProtected; } public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void { const nativeView = this.nativeViewProtected; if (nativeView) { const width = layout.getMeasureSpecSize(widthMeasureSpec); const widthMode = layout.getMeasureSpecMode(widthMeasureSpec); const height = layout.getMeasureSpecSize(heightMeasureSpec); const heightMode = layout.getMeasureSpecMode(heightMeasureSpec); const desiredSize = layout.measureNativeView(nativeView, width, widthMode, height, heightMode); const labelWidth = widthMode === layout.AT_MOST ? Math.min(desiredSize.width, width) : desiredSize.width; const measureWidth = Math.max(labelWidth, this.effectiveMinWidth); const measureHeight = Math.max(desiredSize.height, this.effectiveMinHeight); const widthAndState = View.resolveSizeAndState(measureWidth, width, widthMode, 0); const heightAndState = View.resolveSizeAndState(measureHeight, height, heightMode, 0); this.setMeasuredDimension(widthAndState, heightAndState); } } [htmlProperty.getDefault](): string { return ""; } [htmlProperty.setNative](value: string) { const htmlString = NSString.stringWithString(value + ""); const nsData = htmlString.dataUsingEncoding(NSUnicodeStringEncoding); this.nativeViewProtected.attributedText = NSAttributedString.alloc().initWithDataOptionsDocumentAttributesError(nsData, { [NSDocumentTypeDocumentAttribute]: NSHTMLTextDocumentType }, null); } }