SwiftUI - 如何在运行时更改内部内容后获取 ScrollView 内容高度

Posted

技术标签:

【中文标题】SwiftUI - 如何在运行时更改内部内容后获取 ScrollView 内容高度【英文标题】:SwiftUI - How to get ScrollView Content Height after once the inside content is changed in Run time 【发布时间】:2021-11-12 10:25:10 【问题描述】:

当计数值为静态时,我可以根据以下代码打印滚动视图内容高度

struct ContentView: View 

@State var countValue : Int = 1000
    var body: some View 
        ScrollView 
            ForEach(0..<countValue)  i in
                Text("\(i)")
            
            .background(
                GeometryReader  proxy in
                    Color.clear.onAppear  print(proxy.size.height) 
                
            )
        
    

但是当我在运行时更新 countValue 时,我无法打印新的滚动视图内容大小 高度

请参考以下代码

struct ContentCountView: View 

@State var countValue : Int = 100
    var body: some View 
        ScrollView 
            ForEach(0..<countValue, id: \.self)  i in
                HStack
                    Text("\(i)")
                    Button("update")
                        countValue = 150
                    
                
                
            
            .background(
                GeometryReader  proxy in
                    Color.clear.onAppear 
                        print(proxy.size.height)
                        
                    
                
            )
        
    

如何获得新的滚动视图内容大小高度?请解释一下。

【问题讨论】:

这应该会有所帮助 - ***.com/a/65062892/12299030。 这里不解释scrollview内容大小高度,你能解释一下如何获取内容大小高度 【参考方案1】:

proxy.size.height 正在更新,将print 语句放入onAppear 只是将打印限制在首次出现时。试试这个:

.background(
    GeometryReader  proxy in
         let _ = print(proxy.size.height)
         Color.clear
    
)

【讨论】:

它很棒,但是如何将这些分配给状态变量。

以上是关于SwiftUI - 如何在运行时更改内部内容后获取 ScrollView 内容高度的主要内容,如果未能解决你的问题,请参考以下文章

当我们在文本和图像之间切换按钮内容时,如何停止 SwiftUI 更改固定填充?

SwiftUI:如何更改用户按住导航链接或按钮等内容时发生的颜色变化?

如何在数组大小更改后刷新 ForEach 显示元素的数量(SwiftUI,Xcode 11 Beta 5)

如何在 SwiftUI 中获取 MKMapView 方向

在SwiftUI中点击watchOS应用程序时如何更改图像

如何在 SwiftUI 中触发状态更改/重绘切换更改