美文网首页
iPhoneX上使用drawHierarchy绘制不在屏幕上的v

iPhoneX上使用drawHierarchy绘制不在屏幕上的v

作者: Phelthas | 来源:发表于2018-09-30 10:15 被阅读0次

项目中要分享一个图片,图片内容要根据用户数据来生成,而且生成的图片是不不会显示在屏幕上的。
这个需求不难,用UIView的drawHierarchy方法即可

        let rect = shareImageView.bounds
        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
        shareImageView.drawHierarchy(in: rect, afterScreenUpdates: true)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

问题是,在iPhoneX上,绘制出来的图片左边和下边会有一定宽度的白边,在没有刘海的iPhone上一切正常。
排查了一下发现跟iOS版本没什么关系,只要有刘海,就会出现这个问题。
所以问题应该出在iPhoneX特有的东西上,
想来想去,iPhoneX在界面上特有的东西就只是刘海了,也就是safeArea的问题。
把正常的图片和有边框的图片对比一下,左边多了132px == 44 * 3,下边多了102px == 34 * 3
看这个数值的话,基本确定是safeArea的问题无疑了。
然后修改了View里面的约束,将相对与safeArea的约束,改为相对于superView,问题就解决了。

总结来说:
如果UIView的xib中使用了autoLayout和safeArea,那约束默认是相对于safeArea的。
绘制的View的时候,因为afterScreenUpdates传的是true,所以绘制出的图片是带有safeArea的。
即使这个View没有显示在屏幕上,也受这个规则影响(也正是因为没有出现在屏幕上,才不好发现显示有问题)。
解决方案就是修改autoLayout,当它是在屏幕上显示的来考虑即可。

相关文章

  • iPhoneX上使用drawHierarchy绘制不在屏幕上的v

    项目中要分享一个图片,图片内容要根据用户数据来生成,而且生成的图片是不不会显示在屏幕上的。这个需求不难,用UIVi...

  • 跟随球实现

    在屏幕上绘制一个小球,可以跟随手指移动 练习心得 View的回调方法onDraw(Canvas)负责在画布上绘制v...

  • Android中Drawable Resource学习

    Drawable Resource也即可绘制对象资源,是指可在屏幕上绘制的图形,以及可以使用getDrawable...

  • 绘制像素到屏幕上

    绘制像素到屏幕上 answer-huang22 Mar 2014 分享文章 一个像素是如何绘制到屏幕上去的?有很多...

  • 绘制像素到屏幕上

    一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架、许多功能和方法的结合...

  • 绘制像素到屏幕上

    一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架、许多功能和方法的结合...

  • 绘制像素到屏幕上

    一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架、许多功能和方法的结合...

  • 2020-08-31Unity GL函数库的简单使用

    使用Unity GL库绘制图像 使用Unity自带的GL函数库在屏幕上绘制一些特殊的图形,如圆、线条、曲线、矩形等...

  • 苹果~产品理念与目标

    苹果引领手机屏幕,屏占比盛行的时候,苹果iPhoneX在屏幕上设计了刘海,增加了FaceID.功能,屏幕周边的边距...

  • iPhone系列设备名称

    iPhoneXLaunchImage如果你的APP在iPhoneX上运行发现没有充满屏幕,上下有黑色区域,那么你应...

网友评论

      本文标题:iPhoneX上使用drawHierarchy绘制不在屏幕上的v

      本文链接:https://www.haomeiwen.com/subject/ifgioftx.html