Как бы вы обновили переменную при обнаружении изменения размера GeometryReader? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть Geometry Reader в .background текстового представления, которое сохраняет размер представления в переменную во время .onAppear, который работает для начального расчета размера представления. Но если представление увеличивается, я не могу придумать, как 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 голосов
/ 10 октября 2019

В SwiftUI представление является просто функцией состояния, если что-либо в состоянии изменяется, и весь vie перерисовывается. Поэтому, если геометрия изменится, представление будет автоматически перерисовано, просто определите высоту вида с помощью считывателя геометрии (если это необходимо), и один из модификаторов и SwiftUI сделают всю работу за вас.

...