Правильный способ получить размер представления SwiftUI и записать его в модель - PullRequest
1 голос
/ 24 марта 2020

У меня есть модель:

public struct someModel{
    var someContent: CGSize
}

У меня есть someView:


struct StatusEntryView: View {
    @ObservedObject var model : someModel

    var body: some View {
        ScrollView([Axis.Set.horizontal, Axis.Set.vertical]) {
            GeometryReader { gr in
                VStack{
                    ForEach(self.model.hunks){ hunk in
                        HunkView(hunk: hunk)
                    }
                }

            self.model.contentSize = gr.size
            }
        }
    }
}

Как правильно получить фактический размер содержимого ScrollView и записать его в модель?

1 Ответ

1 голос
/ 24 марта 2020

Это можно сделать с помощью GeometryReader, но не в этом месте, здесь это

ScrollView([Axis.Set.horizontal, Axis.Set.vertical]) {
    VStack{
        ForEach(self.model.hunks){ hunk in
            HunkView(hunk: hunk)
        }
    }.background(GeometryReader { gr in
        self.model.contentSize = gr.size // might be needed wrap in async
        return Rectangle().fill(Color.clear)
    })
}

Примечание: обратите внимание на комментарий в коде, cause now it is not clear how you're going to use that size, but if you'll right ahead from there change layout of views then it will be needed to wrap in DispatchQueue.main .asyn c {} `, чтобы избежать цикличности обновления представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...