使用ZStack的时候出现cannot acquire state change lock的错误怎么办

使用ZStack的时候出现cannot acquire state change lock的错误怎么办,第1张

原因:

出现这个错误属于小概率事件,是由libvirt引发的。出现这个问题后,该云主机上的后续 *** 作只要调用到libvirtd就会失败。

解决办法:

killall -9 libvirtd # rm /var/run/libvirtdpid

完成后重连物理主机。

使用 preferences 时,需要声明一个遵守 PreferenceKey 协议的 Struct PreferenceKey 协议有二个必要的实现,一个是 defaultValue 默认值,另外一个是 reduce 方法。

reduce 方法在 Swift 中非常常见,这里的用处是当有多个子 View 都给父 View 传递数据时,父 View 最后是只能接受一个数据,而 reduce 就是将子 View 提供的多个数据进行“ *** 作”,降维为一个数据提供给父 View 使用, PreferenceKey reduce 方法包含两个参数:当前的 value ,和下一个要合并的值 nextValue ,这二个参数是子 View 从上到下提供的。

这里述说一下完整的布局流程:

1 MainButtonView 在将屏幕宽度扣除掉左右2个方向的 padding=20 后,将这个剩下的宽度尺寸和整个屏幕高度尺寸作为提议,向外层的 HStack 请求尺寸。

2紧接着外层的 HStack 会继续像内层的 ZStack 请求尺寸, ZStack 会继续像内层的二个 HStack 请求尺寸,此时 ZStack 提议给内层的尺寸依旧是上述1中的提议尺寸。

3由于是 ZStack ,内存的 HStack1 HStack2 会拿着提议尺寸继续找自己的 View 请求尺寸。

4 HStack1 内的 Text 会首先尊重提议的宽度尺寸,并根据是否换行或者省略的方式来显示自己,由于此时 HStack1 提议的宽度尺寸较大,此时 Text 会根据显示的文字将 实际的宽度和高度 反馈给 HStack1 ,这样 HStack1 就确定了自己的尺寸。

5 HStack1 确定了自己的尺寸后, Text 通过 GeometryReader 拿到了 HStack1 确定好的尺寸,并通过 SizeKey 告诉期上面的给父 View

6由于 ZStack 调用了 onPreferenceChange 方法,这样 ZStack 就获得了 HStack1 的尺寸,并赋值给了 height 变量, SwiftUI 此时会刷新整个 View ,下面的 HStack2 内的布局和上面 HStack1 差不多,只不多此时 Image 的宽高已有了指定的尺寸( Text 的高度)。

7确定好尺寸的 HStack1 HStack2 将自己的尺寸上报给 ZStack ZStack 确定好尺寸在上报给外层 HStack ,这样整个 MainButtonView 就完成了尺寸布局。

以上就是关于使用ZStack的时候出现cannot acquire state change lock的错误怎么办全部的内容,包括:使用ZStack的时候出现cannot acquire state change lock的错误怎么办、SwiftUI中Preferences的使用、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9579325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存