SwiftUI与UIKit混编,键盘出现后CPU 100%的原因

在使用SwiftUI和UIKit混编的项目中,遇到键盘弹出后UI无响应且CPU达到100%的异常情况。经过调试和分析,发现问题是由于SwiftUI视图的约束冲突导致。修复约束后,问题得到解决。此外,还预告将处理SwiftUI点击区域下移的问题。
摘要由CSDN通过智能技术生成

SwiftUI已经出来了一段时间,有幸在最近的一个大项目中使用SwiftUI, 作为现代化的UI框架,以后的趋势,我们iOS开发的同学势必要掌握它,提升自己的竞争力,以至于更好的混口饭吃。

我们使用的是技术栈是SwiftUI与UIKit混编,这样技能使用SwiftUI快速开发UI的便捷,也能使用UIKit成熟的技术框架,比如路由系统…

但是我们在开发的时候很正常,发布sit后,测试人员反馈了一个奇怪的问题,就是当键盘出现后,整个UI就hold住了,无法相应用户事件。关键这这个问题就像是随机出现的一样,有的机器上能复现,有的机器上打死无法复现。

然后我们拿到能复现的机器,连接数据线就开启调试模式。每当用户激活输入框键盘出现的时候,CPU马上100%,内存也在不断增加。当看到内存不断增加的时候,我们第一反应就是内存泄漏。经过各种排斥,各种Profile, 我们没有找到内存泄漏的地方。

查看CPU占有的问题,Profile看到是底层SwiftUI的函数占用的CPU的,但是还是没有找到原因。

然后我们看日志,尝试分析日志。在日志中看到了autolayout约束冲突的日志,其他日志没有什么可用信息。

于是尝试去看一下是否是约束的问题。最后发现还真是约束的问题。最后把约束解决了,就完全OK了。

最后分析了出现问题的流程:
UIkit UIView A上添加一个用UIHostingController包装的SwiftUI B, 给B添加了约束布局。如果B的约束布局冲突了,那么在A上有键盘出现的时候就会导致CPU 100%且内存狂涨的问题。

解决方案就是修复B的约束。

好了问题就这么完美解决!

下一篇我们解决SwiftUI与UIKit混编,SwiftUI点击区域下移的问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值