首页
学习
活动
专区
工具
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 用来选择合适子视图。

20310
  • 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

    96720

    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

    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

    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.6K70

    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.8K90

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

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

    52330
    领券