GeometryReader в SwiftUI ScrollView вызывает странное поведение и случайное смещение - PullRequest
0 голосов
/ 21 ноября 2019

Я пытаюсь создать ScrollView, который, в свою очередь, содержит GeometryReader (явно не наоборот). GeometryReader должен содержать (изображение) с фиксированной шириной и высотой. Однако при этом ScrollView выдвигает вид «над» экраном, кажется, что он применяет некоторое случайное вертикальное смещение.

enter image description here

var body: some View {
    ScrollView {
        GeometryReader { geometry in
            Image("hp")
                .resizable()
                .aspectRatio(contentMode: .fill)
                .frame(width: geometry.size.width, height: 400)
                .clipped()
        }
    }
}

При удалении GeometryReader и просто вставке изображения все работает нормально.

Может кто-нибудь помочь?

Редактировать: Найдено решение. Я добился желаемого поведения, сказав изображению, что оно должно быть таким же высоким и широким, как и внутренний считыватель геометрии. Затем я устанавливаю рамку считывателя внутренней геометрии. Я использую считыватель внешней геометрии для доступа к общим размерам экрана

var body: some View {
    GeometryReader { outerGeometry in
        ScrollView {
            VStack {
                GeometryReader { innerGeometry in
                    Image("hp")
                        .resizable()
                        .aspectRatio(contentMode: .fill)
                        .frame(width: innerGeometry.size.width,
                        height: innerGeometry.size.height)
                        .offset(y: innerGeometry.frame(in: .global).minY/7)
                        .clipped()
                }
                    .frame(width: outerGeometry.size.width, height: 300)
            }
        }
    }
}

Надеюсь, это кому-нибудь поможет!

1 Ответ

2 голосов
/ 21 ноября 2019

GeometryReader, если он размещен, как вы, предоставляет размер не самого ScrollView, а «просмотра содержимого», в котором размещается изображение. «Представление содержимого» * ​​1003 * больше размера экрана, чтобы обеспечить эффект пружины по краям, когда прокручивается больше, чем размер документа прокрутки.

Правильное использование в ответе @ Александр_Грабовский.

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