【问题标题】:UIWebView resizes on loadRequestUIWebView 在 loadRequest 上调整大小
【发布时间】:2016-03-17 06:48:57
【问题描述】:

我有一个UIWebView,其中的内容被缩放以适应。然后调整 webview 的大小以适应内容(见下文),并按预期工作。

webview 还附加了一个滑动手势来加载新页面 - 当对下一页的 webview 执行 loadRequest 时,会短暂闪烁回到 webview 的初始宽度。我已经确认正在使用 NSTimerUILabels 更改框架以显示框架的宽度。

这是调整大小的代码:

string bookHeightS = bookWebview.EvaluateJavascript ("document.getElementsByTagName('body')[0].scrollHeight");
string bookWidthS = bookWebview.EvaluateJavascript ("document.getElementsByTagName('body')[0].offsetWidth");

nfloat bookHeight = 0;
nfloat.TryParse (bookHeightS, out bookHeight);

nfloat bookWidth = 0;
nfloat.TryParse (bookWidthS, out bookWidth);

nfloat scaling = bookWebview.Frame.Height / bookHeight;

nfloat initialWidth = bookWebview.Frame.Width;
nfloat newWidth = scaling * bookWidth;

CGRect frame = new CGRect (bookWebview.Frame.Location, new CGSize (newWidth, bookWebview.Frame.Height));


if (frame.Width != bookWebview.Frame.Width) {
    bookWebview.Frame = frame;
}

此代码由 webview 上的 LoadFinished 委托调用。

我已经尝试设置 webview 的滚动视图的框架和 webview 的 ContentSize 的大小。

什么可能导致这种闪烁?

【问题讨论】:

  • 人,现在尝试检查多次LoadFinished 被调用。觉得有问题。另外,尝试另一个 html(例如苹果网页?)。

标签: ios webview xamarin uiwebview xamarin.ios


【解决方案1】:

UIWebView 的 webViewDidFinishLoad 委托将在加载网页期间被多次调用,并且轻弹的可能原因是您的网页大小不同,并且您试图通过将 UIWebView 的框架更改为内容大小来适应它们(根据你的代码),你为什么不修复你的 UIWebView 的框架,让你的网页适合你的 UIWebView?在您网页的 css 中只有“宽度:100%”!

【讨论】:

  • 很遗憾,webview 的内容永远不会是一致的大小,使用“拉伸以适应”的方法不可避免地会导致部分内容在 Y 轴上被截断。我也无法控制 webview 中的代码,尽管理论上我可以运行 JS 来添加 CSS。
  • @TomWalters 似乎您需要与内容提供商更好地协调,并应用某种类型的设计原则。
  • 如果只是,它是一个电子书阅读器,这意味着没有标准尺寸
【解决方案2】:

在这里调整 webview 的框架并不完全正确。 一旦加载请求 [uiwebview loadRequest:] 成功完成,LoadFinished 处理程序就会触发,但这并不一定意味着您的 HTML 内容 (DOM) 的执行已经完成。 这里的几点说明可能会有所帮助:

1- 确保您在 HTML 设计中包含了一个视口标记以保持填充方面。 (在头上)

<meta name="viewport" content="width=device-width, user-scalable=no">

2- 检查 UIWebView 内容模式(默认缩放以适应),如果需要也检查抑制增量渲染(取决于您的设计)

3- 实际上,当 Dom 元素已加载并以 HTML 呈现时,无法捕捉到。也许你可以在那里包含一些加载器,超时(记得在页面卸载时清除它)

4-如果您的设计有一些 CSS 标准,您可能需要考虑 100% 的元素宽度来填充页面。

5-如果您使用自动布局,只需修复 UIWebview 的框架,而不是在每次滑动时处理 WebViewFrame。

我能想到的就这些了,祝你好运。

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多