ChildSizeReader:
Код: Выделить всё
struct ChildSizeReader: View {
@Binding var size: CGSize
let content: () -> Content
var body: some View {
ZStack {
content()
.background(
GeometryReader { proxy in
Color.clear
.preference(key: SizePreferenceKey.self, value: proxy.size)
}
)
}
.onPreferenceChange(SizePreferenceKey.self) { sizeValue in
size = sizeValue
}
}
}
struct SizePreferenceKey: PreferenceKey {
typealias Value = CGSize
static var defaultValue: Value = .zero
static func reduce(value _: inout Value, nextValue: () -> Value) {
_ = nextValue()
}
}
Код: Выделить всё
@State private var scrollViewSize: CGSize = .zero
...
ScrollViewReader { proxy in
ScrollView(.vertical) {
ChildSizeReader(size: $scrollViewSize) {
FeatureSet(features: features)
}
}
}
Код: Выделить всё
struct FeatureSet: View {
var features: [Feature]
var body: some View {
LazyVStack {
ForEach(Array(features.enumerated()), id: \.element.title) { index, feature in
FeatureRow(title: feature.title, value: feature.value)
.id(feature.title)
if index != features.count - 1 {
Divider()
.frame(height: 1)
.overlay(Color(hex: 0x808080, opacity: 0.2))
}
}
}
}
}
Но в тот момент, когда я начинаю прокрутку, размер устанавливается на ожидаемое значение.
Есть ли какие-нибудь идеи о том, как получить правильный размер ScrollView при первоначальном рендеринге? Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/792 ... itial-rend