Files

67 lines
2.4 KiB
TypeScript

import {
HtmlViewBase, View, layout, htmlProperty
} from "./html-view-common";
import { ios } from "../../utils/utils";
export * from "./html-view-common";
const majorVersion = ios.MajorVersion;
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,
<any>{ [NSDocumentTypeDocumentAttribute]: NSHTMLTextDocumentType },
null
);
if (majorVersion >= 13) {
this.nativeViewProtected.textColor = UIColor.labelColor;
}
}
}