【发布时间】:2020-07-20 17:24:23
【问题描述】:
我有一些存储在NSData 中的html 内容,我想用WKWebView 显示这些内容。基本上把它想象成ASCII艺术。我遇到的问题是 WKWebView 坚持以这样的方式布置内容,以使其适合 1.0 比例的设备宽度。所以它包裹了很多行文本,使它看起来很糟糕。不管好坏,生成HTML 内容的目的是换行只会在明确的<br> 实例中发生,我无法真正改变这一点。我想要的是能够告诉 WKWebView “将此页面放置为好像屏幕是 1000 像素宽,即使它不是”,然后用户可以水平滚动以查看更长的行(如果需要),或者缩小直到长线适合。
我尝试了很多方法,但都没有任何效果。
- 我尝试使用 WKWebView 的
frame和contentSize。 (无效) - 我尝试更改 WKWebView 的 UIScrollView 的
frame和contentSize。 (无效) - 我尝试使用
[config.userContentController addUserScript:script]添加用户脚本。 (在使用loadData或loadHTMLString时似乎根本没有真正调用这些。也许它们只能通过 URL 加载?) - 尝试在
<meta name='viewport' content='width=2000'>的 html 字符串本身中添加前导码(这使得视图可以水平滚动到 2000 像素,但 html 内容仍以设备宽度包裹) - 尝试将 WKWebView 放在单独的 UIScrollView 中,其中
frame和contentSize设置为比屏幕宽。 (无效)
我可以接受需要在 HTML 本身上附加或附加某些内容的解决方案,但我不希望必须进行 CSS 修改来对文档的内容做出假设。所以像视口元这样的东西很好,但是为特定元素标签添加特殊的 CSS 覆盖并不是那么好(例如,使所有 span 元素成为 display: inline-block;)。如果 iOS API 本身有一种方法可以诱使 WKWebView 在比屏幕更宽的范围内进行布局,那就最好不过了。
设置很简单。我有一个MyUIViewController,它基本上有这段代码来制作 WKWebView 并加载数据。
- (void)viewDidLoad {
[super viewDidLoad];
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
_webView = [[WKWebView alloc] initWithFrame:frame configuration:config];
[self.view addSubview:_webView];
[_webView loadData:_data
MIMEType:@"text/html"
characterEncodingName:@"UTF-8"
baseURL:_baseURL];
}
【问题讨论】:
标签: html ios objective-c wkwebview