Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取SwiftUI中列表的内容偏移量_Ios_List_Offset_Swiftui - Fatal编程技术网

Ios 获取SwiftUI中列表的内容偏移量

Ios 获取SwiftUI中列表的内容偏移量,ios,list,offset,swiftui,Ios,List,Offset,Swiftui,我试图在SwiftUI中创建一个视差标题效果,就像这样,但我真的不知道如何在滚动时获得列表的内容偏移量 有人知道如何在滚动时计算列表的内容偏移量吗?我为ScrollView案例提供了一个可重用的解决方案,它利用视图首选项作为通知视图层次结构上游布局信息的方法 有关查看首选项如何工作的详细说明,我建议您在 不幸的是,这种解决方案不适用于列表(可能是一个bug),因为视图首选项被困在列表中,并且它的祖先不可见 到目前为止,唯一可行的解决方案是观察列表中视图的帧更改。您可以通过两种方式实现这一点: 您

我试图在SwiftUI中创建一个视差标题效果,就像这样,但我真的不知道如何在滚动时获得列表的内容偏移量


有人知道如何在滚动时计算列表的内容偏移量吗?

我为
ScrollView
案例提供了一个可重用的解决方案,它利用视图首选项作为通知视图层次结构上游布局信息的方法

有关查看首选项如何工作的详细说明,我建议您在

不幸的是,这种解决方案不适用于
列表
(可能是一个bug),因为视图首选项被困在
列表
中,并且它的祖先不可见

到目前为止,唯一可行的解决方案是观察列表中视图的帧更改。您可以通过两种方式实现这一点:

您可以报告和侦听列表中每个视图(单元格)的布局更改(并对其执行操作):

struct testview 1:视图{
var body:一些观点{
GeometryReader{中的几何体
List(TestEnum.allCases){listValue in
文本(listValue.id)
.填充(60)
.TransformAnchorReference(键:MyKey.self,值:.bounds){
$0.append(MyFrame(id:listValue.id,frame:geometry[$1]))
}
.onPreferenceChange(MyKey.self){
印刷品(0美元)
//在此处处理内容框架更改
}
}
}
}
}
或者,如果不需要对每个单元格进行框架更改,则报告并侦听某些表头视图(或空表头)上的框架更改:

struct testview 2:视图{
var body:一些观点{
GeometryReader{中的几何体
名单{
正文(“”)
.TransformAnchorReference(键:MyKey.self,值:.bounds){
$0.append(MyFrame(id:“tabletocell”,frame:geometry[$1]))
}
.onPreferenceChange(MyKey.self){
印刷品(0美元)
//在此处处理俯视图框架的更改。
//这只会在
//俯视图是内容的一部分。这可能是
//当列表内部不可见时移除。
}
ForEach(TestEnum.allCases){
文本($0.rawValue)
.填充(60)
}
}
}
}
}
在下面找到上述解决方案的支持代码:
PreferenceKey
一致性结构、可识别的图幅结构和作为数据源的测试枚举:

struct MyFrame:equalable{
let id:String
让帧:CGRect
静态函数==(左:MyFrame,右:MyFrame)->Bool{
lhs.id==rhs.id&&lhs.frame==rhs.frame
}
}
结构MyKey:PreferenceKey{
typealias值=[MyFrame]//视图树中的图幅更改列表。
静态变量defaultValue:[MyFrame]=[]
///在遍历视图树时,Swift UI将使用此功能收集所有图幅更改。
静态函数reduce(值:inout[MyFrame],nextValue:()->[MyFrame]){
append(contentsOf:nextValue())
}
}
enum TestEnum:字符串,可大小写,可识别{
一、二、三、四、五、六、七、八、九、十
变量id:String{
原值
}
}

在那条推特上的回复中,作者建议使用
GeometryReader
来获取它。您测试过这种方法吗?是的,我设法使用
GeometryReader
滚动视图中获取内容偏移量,仍在研究如何将相同的技术应用于
列表
ScrollView
的源代码在这里:仍在寻找列表的解决方案。任何人都发现了什么(我正在使用Beta3,但就我所能找到的而言,仍然没有爱)。这可能会有所帮助@我想你的要点回答了最初的问题。你不应该回答并接受正确的答案吗?或者需要完整的解决方案?上面的文本(“”)左偏移量