首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么 - [UIWebView sizeThatFits:]给出比document.body.offsetHeight/Width更大的尺寸?

这个问题是关于UIWebView在iOS开发中的一个问题。UIWebView是一个用于在iOS应用中嵌入网页的组件。sizeThatFits:方法是用于确定UIWebView的最佳尺寸。document.body.offsetHeight/Width是JavaScript中获取网页内容高度和宽度的方法。

问题:为什么UIWebView的sizeThatFits:给出比document.body.offsetHeight/Width更大的尺寸?

答案:UIWebView的sizeThatFits:方法返回的尺寸是根据整个网页的内容,包括可见和不可见的部分来计算的。而document.body.offsetHeight/Width只返回当前可见的网页内容的高度和宽度。因此,当网页中存在不可见的内容时,UIWebView的sizeThatFits:方法会返回一个更大的尺寸。

解决方法:如果您需要获取UIWebView中网页内容的实际尺寸,可以使用以下JavaScript代码:

代码语言:javascript
复制
var body = document.body, html = document.documentElement;
var height = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );
var width = Math.max( body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth );

这段代码会返回网页内容的实际高度和宽度,包括不可见的部分。然后,您可以将这些尺寸与UIWebView的sizeThatFits:方法返回的尺寸进行比较,以确定最佳的尺寸。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SwiftUI 布局协议 - Part 1

有三个可能的情况,我们将专注讨论于横轴(宽度),但纵轴(高度)同理: 情况一:如果子视图需求小于提供的视图 在这个例子中考虑文本视图,提供了比需要绘制文字更多的空间 struct ContentView...当 sizeThatFits 方法在给定维度中(即宽度或高度)收到的建议尺寸为 nil 时,我们应该返回容器的理想尺寸。当收到的建议尺寸为0.0时,我们应该返回容器的最小尺寸。...当收到的建议尺寸为 .infinity 时,我们应该返回容器的最大尺寸。 注意 sizeThatFits 可能通过不同提案多次调用来测试容器的灵活性,提案可以是上述每个维度案例的任意组合。...如果你没有明确的放置位置,这就是容器的默认视图。 在我们的 sizeThatFits 方法中,我们首先要计算每个视图的所有理想尺寸。我们可以很容易的实现,因为子视图代理中有返回建议尺寸的方法。...那么我们为什么一直在 ViewBuilder中使用布局容器,就好像它们是视图一样?事实证明,当你用代码放置你的布局时,会有一个系统函数调用来产生视图。那这个函数叫什么呢?

3.3K10

掌握 ViewThatFits

首先,ViewThatFits 需要获取它所能使用的空间,也就是其父视图给出的建议尺寸。 判断顺序根据 ViewBuilder 闭包中的顺序,从上至下逐个对子视图进行。...ViewThatFits 向子视图查询其理想尺寸(根据未指定建议尺寸返回的需求尺寸)。 根据受限轴的设置,在选择的受限轴上,比较子视图的理想尺寸和 ViewThatFits 的父视图给出的建议尺寸。...ViewThatFits 将父视图给出的建议尺寸作为自己的建议尺寸传递给选择的子视图,并获得该子视图在明确建议尺寸下的需求尺寸。...为什么最后会变成这个样子呢? 首先,ViewThatFits 经过逐个比对,发现闭包中没有任何一个 Text 的理想尺寸宽度不大于 10 ,因此它选择了最后一个 Text("Hi") 。...对于 logo 和 title,我们没有给出明确的尺寸。通过为 Rectangle 设置理想尺寸,供 ViewThatFits 用来选择合适的子视图。

23910
  • onAppear 的调用时机

    图片请忽略例子中的写法是否合理和值得推荐,仅考虑为什么在第一段代码中,出现了数组越界的情况;以及第二段代码可以正确运行。...布局在计算好当前需要显示的视图所有的视图值后,SwiftUI 将进入到布局阶段。通过父视图向子视图提供建议尺寸,子视图返回需求尺寸这一过程,最终计算出完整的布局结果。...有关布局的流程请阅读 SwiftUI 布局 —— 尺寸 渲染SwiftUI 通过调用更加底层的 API,将视图在屏幕上呈现的过程。此过程严格意义上已经不属于 SwiftUI 的管理范畴了。...与 Layout 协议的 sizeThatFits 调用时机一致,都是在布局过程中,父视图向子视图询问需求尺寸时访问。...通过 UIViewControllerRepresentable 封装的“视图”并非真正的视图,对于 SwiftUI 来说,它就是一块给出了需求尺寸的黑洞,因此并不存在求值一说。

    2.1K20

    onAppear 的调用时机

    image-20230328163706115 请忽略例子中的写法是否合理和值得推荐,仅考虑为什么在第一段代码中,出现了数组越界的情况;以及第二段代码可以正确运行。...布局 在计算好当前需要显示的视图所有的视图值后,SwiftUI 将进入到布局阶段。通过父视图向子视图提供建议尺寸,子视图返回需求尺寸这一过程,最终计算出完整的布局结果。...有关布局的流程请阅读 SwiftUI 布局 —— 尺寸[5] 渲染 SwiftUI 通过调用更加底层的 API,将视图在屏幕上呈现的过程。此过程严格意义上已经不属于 SwiftUI 的管理范畴了。...与 Layout 协议的 sizeThatFits 调用时机一致,都是在布局过程中,父视图向子视图询问需求尺寸时访问。...通过 UIViewControllerRepresentable 封装的“视图”并非真正的视图,对于 SwiftUI 来说,它就是一块给出了需求尺寸的黑洞,因此并不存在求值一说。

    1.1K10

    SwiftUI 布局 —— 尺寸( 上 )

    以子视图为符合 Layout 协议的自定义布局容器举例,父视图通过调用子视图的 sizeThatFits 方法提供建议尺寸。...而该自定义布局容器又会在它的 sizeThatFits 方法中通过调用其子视图代理( Subviews,子视图在 Layout 协议中的表现方式 )的 sizeThatFits 方法为子视图代理提供建议尺寸...// 代码来自 My_ZStackLayout // 容器的父视图(父容器)将通过调用容器的 sizeThatFits 获取容器的需求尺寸,本方法通常会被多次调用,并提供不同的建议尺寸 func sizeThatFits...nil : proposal.height // 获取子视图的需求尺寸 let size = content.sizeThatFits(.init(width: width, height...需求尺寸为 infinity * infinity 明确尺寸模式 需求尺寸为建议尺寸 未指定模式 需求尺寸为 10 x 10( 至于为什么是 10 x 10 ,下文中的理想尺寸将有更详细的说明 ) Text

    4.8K20

    CoreText实现图文混排之尺寸估算及文本选择

    一脸正经 这篇文章的主要目的是回答童靴们的问题,因为有童靴问过我尺寸估算和文本选择的问题,当时由于的确没有研究那方面内容所以回答的时候均没有给出解决方案,只提供思路。...constraints : 尺寸约束,就是尺寸估算的最大边界,其使用方法类似于[UIView sizeThatFits:size] 中size的用法。 * fitRange : 约束内的文本范围。...所以说通过这个方法,我们可以像使用[UIView sizeThatFits:size]这个方法一样计算出一段文本的预估尺寸,但是问题还没有这么简单的到此结束: 如果想要绘制的文本中,存在排除区域的话,只能通过...以上就是老司机对有排除区域的预估尺寸的思路,以下则是代码(这个没有专门写demo,截取自老司机的DWCoreTextLabel中对-sizeThatFits:方法的重写实现): -(CGSize)sizeThatFits...:(CGSize)size { ///计算绘制尺寸限制 CGFloat limitWidth = (size.width - self.textInsets.left - self.textInsets.right

    98420

    iOS中播放gif动态图的方式探讨 原

    * timeArray = [[NSMutableArray alloc]init];     //存放每张图片的宽度 (一般在一个gif文件中,所有图片尺寸都会一样)     NSMutableArray...NSMutableArray * times = [[NSMutableArray alloc]init];             float currentTime = 0;             //设置每一帧的时间占比...三、使用UIWebView来加载gif动态图数据     iOS中的UIWebView功能十分强大,可以通过UIWebView为载体,来展示gif图。... *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height...    经过测试,从加载速度上来说,通过UIImageView类别加载的方式更加快速,UIWebView的方式加载时间会稍长,但是从性能上来比较,WebView的方式性能更优,播放的gif动态图更加流畅

    1.9K20

    【iOS开发】从 UIWebView 到 WKWebView

    ② UIWebView 和 WKWebView 的区别 WKWebView 更快(占用内存可能只有 UIWebView 的1/3~1/4),没有缓存,更为细致地拆分了 UIWebViewDelegate...想要了解更多关于 WKWebView 的特性的,可以自行 Google,这里你可以简单地把它当做是轻量级的 UIWebView。...③为什么现在是时候从 UIWebView 迁移到 WKWebView 了: 截止到我写这篇文章的时候,据 mixpanel 的数据,iOS 9 占有率已达 58.55%,iOS 8 占有率达到了 34.78%...正文 常用代理方法 在 WKWebView 中,UIWebViewDelegate 与 UIWebView 被重构成了14类与3个协议,下面给出一些在 UIWebView 中常用的方法的 WKWebView...字段 //初始化WKWebView let webview = WKWebView( frame: CGRectMake(0, 0, self.view.frame.width

    1.8K20

    将 UWP 的有效像素(Effective Pixels)引入 WPF

    不能说那些意义不明确的词,尤其是“宽高”“大小”“尺寸”“更大”。试想你说一个按钮的宽高是 200,那么它的宽高到底是多少呢?一个屏幕上的按钮和另一个屏幕上的按钮哪个更大呢?...在本文中,对于尺寸,我们只说三个概念: 物理尺寸(单位:厘米) 显示器像素个数(单位:个) 有效像素(即 WPF 中最常用的那个单位;在本文结束之前,这应该是一个未定义的概念) 如果我们说 A 按钮比...那么当你写下 Width="96" 时,到底缩放还是不缩放呢?缩放就迁就了 DPI 缩放的特性,违背了物理尺寸相同的特性;不缩放就迁就了物理尺寸相同的特性,丢失了 DPI 缩放的特性。...Windows 操作系统上支持的最低 DPI 设置只能是 96 了,不能再低;以至于后者实际上在相同观看距离上比前者显示的界面元素的物理尺寸会大很多。...这也是为什么我们经常能发现有些笔记本上的图标和字体大小被默认设置得小得可怜,或者超大屏幕设备上文字小得远处看不清的原因。

    1.5K21

    测试匠谈 | 微信H5兼容性测试理论和实践经验

    为什么微信H5兼容性测试困难?① 移动端设备复杂Android的设备情况:OpenSignal 在 2015 年 8 月发布的基础统计数据可以看到Android的设备复杂度。...移动端兼容性测试常用方法① 屏幕尺寸兼容性测试使用浏览器的开发者工具或专门的响应式测试工具(如Responsive Design Mode)来模拟不同设备的屏幕尺寸和方向,确保网页在不同设备上呈现良好(...影响兼容性的主要因素因为页面是承载在浏览器上的,影响兼容性的因素有以下几点:屏幕尺寸屏幕分辨率浏览器内核屏幕尺寸和屏幕分辨率会影响页面的排版样式,但是浏览器内核才会影响CSS、JS API 的兼容性。...苹果在 iOS 13 上,要求开发者必须用 WKWebView 替代 UIWebView,按照苹果2019年12月13日的文档 Updating Apps that Use WebViews 里给出的时间要求是...如果能拿到其它的统计数据,比如微信中iOS用户使用占比,也可以用同样的分析方式进行计算,算出占比靠前的iOS版本。

    11510

    FLAnimatedImage -ios gif图片加载框架介绍

    第二种方式,可能是大家用的最多的了。 就是创建一个 UIWebView 然后在这里面把 GIF 显示出来。 但从原理上来想, UIWebView 并不是为了显示 GIF 图片而生的。...gif渲染原理分析 为什么说 FLAnimatedImage 相对于 iOS 原生的几种 hack 方式更趋近于最佳实践呢? 咱们简单聊聊 FLAnimatedImage 渲染 GIF 图片的原理。...addSubview:self.imageView1]; self.imageView1.frame = CGRectMake(0.0, 120.0, self.view.bounds.size.width...(nonatomic, assign, readonly) CGSize size; //GIF动画的封面帧图片的尺寸 @property (nonatomic, assign, readonly)...NSUInteger)index; // Pass either a `UIImage` or an `FLAnimatedImage` and get back its size // 计算该帧图片的尺寸

    1.7K70

    Threejs入门之二十二:Threejs中的屏幕坐标转标准设备坐标

    / window.innerHeight ) * 2 + 1 //处理为 -1 ~ 1 的范围 }) 那么我们为什么要这么转换呢?...HTML中的坐标系有前端基础的人都知道HTML中有四个坐标系,分别是screen,page,client和offset,他们用于描述DOM元素的Box尺寸和MouseEvent中的位置 1 screen...offset坐标的最大范围是 (document.body.offsetWidth, document.body.offsetHeight)。...、height表示canvas画布宽高度 const x = (px / width) * 2 - 1; const y = -(py / height) * 2 + 1;})画布的宽度是width...,.offsetX的范围是0-width,.offsetX除以canvas画布宽度width,就可以从绝对值变成相对值,范围是0-1,相对值乘以2,范围0-2,再减去1,范围是-1-1,刚好和canvas

    2.3K10

    sizeHint() minimumSizeHint() sizePolicy() 的使用

    但是 widget 的大小的确定还有其它因素作用,下面会讲到。现在只需知道 sizeHint() 会返回一个被推荐的尺寸。那么这个尺寸的取值是怎样的呢?...),以下就是缩小到了极致:(112,10),同学,是否在思考为什么 width 无法缩小到比 112 更小了。...就可以比之前更小一点啦,如下右图。...::Maximum 可以伸展和收缩,不过sizeHint() 的返回值规定了 widget 能伸展到的最大尺寸 QSizePolicy::Preferred 可以伸展和收缩,但没有优势去获取更大的额外空间使自己的尺寸比...sizeHint() 的返回值更大 QSizePolicy::Expanding 可以伸展和收缩,它会尽可能多地去获取额外的空间,也就是比 Preferred 更具优势 QSizePolicy::MinimumExpanding

    2.4K10

    FLAnimatedImage -ios gif图片加载框架介绍

    第二种方式,可能是大家用的最多的了。 就是创建一个 UIWebView 然后在这里面把 GIF 显示出来。 但从原理上来想, UIWebView 并不是为了显示 GIF 图片而生的。...gif渲染原理分析 为什么说 FLAnimatedImage 相对于 iOS 原生的几种 hack 方式更趋近于最佳实践呢? 咱们简单聊聊 FLAnimatedImage 渲染 GIF 图片的原理。...addSubview:self.imageView1]; self.imageView1.frame = CGRectMake(0.0, 120.0, self.view.bounds.size.width...(nonatomic, assign, readonly) CGSize size; //GIF动画的封面帧图片的尺寸 @property (nonatomic, assign, readonly)...NSUInteger)index; // Pass either a `UIImage` or an `FLAnimatedImage` and get back its size // 计算该帧图片的尺寸

    3.9K90

    详细的聊一聊如何使用响应式图片,提升网页加载速度

    如果您的浏览器具有高分辨率或您在页面上进行了缩放,它可能会下载比800像素更大的图像,但通常情况下,这是确保图像不会过大的一种好方法。...如果您使用的是高分辨率设备,您可能会注意到浏览器下载了比800像素更大的图像。...使用百分比 到目前为止,我已经向您展示了如何使用像px这样的具体尺寸,以及如何使用基于浏览器窗口的尺寸,比如vw,但是百分比尺寸(如50%)该怎么办呢?不幸的是,在sizes属性中不支持百分比尺寸。...如果没有任何媒体查询匹配,则使用img标签作为备选项,这也是为什么我们没有针对较大屏幕尺寸专门设置source元素的原因。...但是,当您希望在不同的屏幕尺寸上显示不同的图像时,这可能会成为一个问题,这就是为什么picture元素是理想的选择。

    55930
    领券