SwiftUI GeometryReader возвращает 0,0 для размера содержимого ScrollView при первоначальном рендерингеIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 SwiftUI GeometryReader возвращает 0,0 для размера содержимого ScrollView при первоначальном рендеринге

Сообщение Anonymous »

Я пытаюсь получить размер содержимого ScrollView при первоначальном рендеринге представления, но он возвращает 0,0 вместо фактического размера. Чтобы попытаться добиться этого, я создал представление ChildSizeReader после этого сообщения, и код выглядит следующим образом:
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()
}
}
Использование ChildSizeReader:

Код: Выделить всё

@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))
}
}
}
}
}
Я также попробовал обернуть Color.clear.preference в условный оператор if proxy.size != .zero, как показано на этом форуме, но размер по-прежнему был равен 0,0, когда он был присвоен размеру.
Но в тот момент, когда я начинаю прокрутку, размер устанавливается на ожидаемое значение.
Есть ли какие-нибудь идеи о том, как получить правильный размер ScrollView при первоначальном рендеринге? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... itial-rend
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Свойство загрузки MudTable игнорируется при первоначальном рендеринге
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как предотвратить анимацию при первоначальном рендеринге?
    Anonymous » » в форуме CSS
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • SwiftUI TabView со стилем .page: GeometryReader minX не обновляется при прокрутке страницы
    Anonymous » » в форуме IOS
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • SwiftUI TabView со стилем .page: GeometryReader minX не обновляется при прокрутке страницы
    Anonymous » » в форуме IOS
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • GeometryReader с дочерним элементом выходит за пределы безопасной зоны с помощью SwiftUI
    Anonymous » » в форуме IOS
    0 Ответы
    71 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»