原因:
出现这个错误属于小概率事件,是由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的使用、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)