方法1:获取webview中scrovllview的contentsize进行设置
-(void)webViewDidFinishLoad:(UIWebView
)webView{
CGFloat
webViewHeight=[webViewscrollView
contentSize]height;
CGRect
newFrame
=
webViewframe;
newFramesizeheight
=
webViewHeight;
webViewframe
=
newFrame;
}
方法2:执行js语句 直接获取html文档的dom高度
-(void)webViewDidFinishLoad:(UIWebView
)webView{
CGFloat
webViewHeight=
[[webView
stringByEvaluatingJavaScriptFromString:
@"documentbodyoffsetHeight"]floatValue];
// CGFloat webViewHeight= [[webView
stringByEvaluatingJavaScriptFromString:
@"documentbodyscrollHeight"]floatValue];
CGRect
newFrame
=
webViewframe;
newFramesizeheight
=
webViewHeight;
webViewframe
=
newFrame;
}
方法3先将UIWebView的高度设为最小,然后再使用sizeThatFits就会返回刚好合适的大小
-(void)webViewDidFinishLoad:(UIWebView
)webView{
CGSize
actualSize
=
[webView
sizeThatFits:CGSizeZero];
CGRect
newFrame
=
webViewframe;
newFramesizeheight
=
actualSizeheight;
webViewframe
=
newFrame;
}
方法4遍历webview子视图 获取UIWebDocumentView高度即实际高度
Objective-C
-(void)webViewDidFinishLoad:(UIWebView
)webView{
CGFloat
webViewHeight
=
00f;
if
([webViewsubviews
count]
>
0)
{
UIView
scrollerView
=
webViewsubviews[0];
if
([scrollerViewsubviews
count]
>
0)
{
UIView
webDocView
=
scrollerViewsubviewslastObject;
if
([webDocView
isKindOfClass:[NSClassFromString(@"UIWebDocumentView")
class]])
{
webViewHeight
=
webDocViewframesizeheight;//获取文档的高度
webViewframe=
webDocViewframe;
//更新UIWebView 的高度
}
}
}
}
User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随>
- (BOOL) webView:(UIWebView )webView shouldStartLoadWithRequest:(NSURLRequest )request navigationType:(UIWebViewNavigationType)navigationType去拿 request的>
唯一的workaround就是给webview里相关请求缩短timeout时间,等待timeout之后会调用代理方法didFinishLoading,这时候再插入js代码。
但不过这种方式不是非常完美的方法,会继续研发。
由于最近产品要求能够将网页转换为一整张,预估整个网页的高度大概有10多个屏幕的高度,因此需要添加一个网页转换为的功能。
如果是外部网页,可以用 Safari 浏览器的截长屏功能(需要iOS 130+)。但是,这次需要截取的内容是通过 APP 内的 UIWebView 显示的 HTML 网页,这就无法通过 iOS 自带的截屏功能实现了(都9012年了,iOS 怎么还没有截长屏功能?)。
相关链接:[iOS] UIScrollView (UIWebView) 截长屏功能实现
UIGraphics 实现起来比较简单,但是需要注意 运行内存的释放 问题。
CoreGraphics 速度快,占用空间手动释放,还可以使用异步实现,但是要花时间理解 CoreGraphics 的相关函数,需要对 CoreGraphics 绘制的进行翻转(这就涉及到 CoreGraphics 坐标系的问题)。
这两种方案中,更 推荐使用 CoreGraphics 来实现截屏功能 。
另外,在使用这两种方案的调试过程中,一定要时刻关注运行内存的变化。使用 iPhone 6 测试,当高度达到 20000 + 的时候,内存都会达到 450M 左右(上限 650M)。
(2) 添加截取的功能
(3) 添加保存到相册的功能
在实现这个功能之前,需要在infoplist中添加“Privacy - Photo Library Usage Description”,否则会造成 APP 崩溃。
(4) 绑定截图按钮事件
下面比较一下几种方式生成的效果图。图(1)是通过 UIGraphic 方法绘制的,图(2)是通过 CoreGraphics 方法绘制的,图(3)是使用 Safari 浏览器中整页截图生成的 PDF ,转换而成的。
以上就是关于ios为什么webview会多出下面tabbar的高度全部的内容,包括:ios为什么webview会多出下面tabbar的高度、浅谈iOS中的userAgent、uiwebview 如何获取post的请求数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)