大佬教程收集整理的这篇文章主要介绍了将 UIScrollView 与 @ViewBuilder 集成,但内容中的子视图不更新,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 UIRepresentable 将 UIScrollVIEw 与 SwiftUI 集成,它在显示上运行良好。我使用 @viewbuilder 允许人们将他们的自定义内容插入到我的自定义滚动视图中,但是我发现 @State 变量在我的自定义滚动视图中的自定义内容中不起作用。我对这个问题很困惑。任何人都可以帮助我吗?
我发现在滚动时会调用 updateUIVIEw,但我不知道为什么 @viewbuilder 中的 Text 没有更新,以及如何使其更新。
演示项目:
import SwiftUI
struct ContentVIEw: VIEw {
@State var speed: CGfloat = 0
@State var offset: CGfloat = 0
var body: some VIEw {
vstack {
// This Text works
Text("Speed: \(speed),Offset: \(offset)")
UIScrollVIEwControl(speed: $speed,offset: $offset,contentWIDth: UIScreen.main.bounds.wIDth,contentHeight: UIScreen.main.bounds.height) {
// This Text never updates
Text("Speed: \(speed),Offset: \(offset)")
}
}
}
}
UIScrollVIEwControl.swift
struct UIScrollVIEwControl<Content: VIEw>: UIVIEwRepresentable {
@Binding var speed: CGfloat
@Binding var offset: CGfloat
var contentHeight: CGfloat
var contentWIDth: CGfloat
let content: Content
init(speed: Binding<CGfloat>,offset: Binding<CGfloat>,contentWIDth: CGfloat,contentHeight: CGfloat,@viewbuilder content: () -> Content) {
self._speed = speed
self._offset = offset
self.contentWIDth = contentWIDth
self.contentHeight = contentHeight
self.content = content()
}
func makeCoordinator() -> Coordinator {
Coordinator(parent1: self)
}
func makeUIVIEw(context: Context) -> UIScrollVIEw {
let vIEw = UIScrollVIEw()
vIEw.contentSize = CGSize(wIDth: 1.0,height: contentHeight)
vIEw.showsHorizontalScrollinDicator = false
vIEw.showsverticalScrollinDicator = false
vIEw.delegate = context.coordinator
let vIEw1 = UIHosTingController(rootVIEw: content)
vIEw1.vIEw.frame = CGRect(x: 0,y: 0,wIDth: contentWIDth,height: contentHeight)
vIEw1.vIEw.BACkgroundcolor = .clear
vIEw.addSubvIEw(vIEw1.vIEw)
return vIEw
}
func updateUIVIEw(_ uiVIEw: UIScrollVIEw,context: Context) {
}
class Coordinator: NSObject,uiscrollviewdelegate {
var parent: UIScrollVIEwControl
init(parent1: UIScrollVIEwControl) {
parent = parent1
}
func scrollVIEwDIDEndDeceleraTing(_ scrollVIEw: UIScrollVIEw) {
parent.speed = 0
}
func scrollVIEwDIDScroll(_ scrollVIEw: UIScrollVIEw) {
parent.speed = scrollVIEw.contentOffset.y - parent.offset
parent.offset = scrollVIEw.contentOffset.y
}
}
}
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的将 UIScrollView 与 @ViewBuilder 集成,但内容中的子视图不更新全部内容,希望文章能够帮你解决将 UIScrollView 与 @ViewBuilder 集成,但内容中的子视图不更新所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。