检测到GeometryReader大小变化后,如何更新变量?

时间:2019-10-10 00:14:58

标签: swiftui swift5

我在Text视图的.background中有一个Geometry Reader,它在.onAppear期间将View的大小保存到一个变量中,该变量可用于视图的初始大小计算。但是,如果视图增长,我想不出一种方法让Geometry Reader更新视图的大小变量(taskHeight)。

.background(
                    GeometryReader {geometry in
                        ZStack{
                            Rectangle()
                                .fill(Color.clear)
                                .onAppear{
                                    self.taskHeight = geometry.size.height      
                            }

                            // below is a function I created to try to get an updated taskHeight
                            // every time the String being typed updates, however including this
                            // gives me an error (written below the code snippet)

                            if (shouldCheckTaskSize())
                            {
                                self.taskHeight = geometry.size.height
                                Text("")
                            }

                        } //ZStack

                    }
            )

我试图解决我的问题的函数抛出此错误:“编译器无法在合理的时间内对这个表达式进行类型检查;尝试将表达式分解为不同的子表达式”

这是函数:

func shouldCheckTaskSize() -> Bool
{
    if (self.newTaskTitle != self.lastSizedTaskTitle)
    {
        self.lastSizedTaskTitle = self.newTaskTitle
        return true
    }
    else
    {
        return false
    }

}

1 个答案:

答案 0 :(得分:0)

在SwiftUI中,如果状态中的任何内容发生更改,则整个视图只能重新绘制,视图只是状态的函数。因此,如果几何图形发生变化,视图将自动重绘,只需使用几何图形阅读器(如果需要)定义视图的高度,修饰符和SwiftUI之一即可为您完成工作。