Почему горизонтальный ScrollView SwiftUI внутри вертикального ScrollView отказывается игнорировать вставки в ландшафтном режиме? - PullRequest
1 голос
/ 05 мая 2020

Я начинаю со следующего горизонтального ScrollView в SwiftUI и, тестируя его на iPhone 11 в ландшафтном режиме, я вижу, что даже несмотря на то, что рамка ScrollView учитывает как .leading, так и .trailing вставки при прокрутке элементов внутри они появляются за выемкой и за пределами ScrollView.

ScrollView(.horizontal) {
    HStack {
        ForEach(1..<20) { index in
            Rectangle().frame(width: 100, height: 100).opacity(0.5)
        }
    }
}.background(Color(.red)).opacity(1)

Это желаемое поведение, и я вижу, что это происходит в таких приложениях, как ярлыки или фотографии для iOS 13. Однако, когда я вставляю приведенное выше в Vertical ScrollView и тестирую в тех же условиях:

ScrollView(.vertical) {
    VStack {
        ScrollView(.horizontal) {
            HStack {
                ForEach(1..<20) { index in
                    Rectangle().frame(width: 100, height: 100).opacity(0.5)
                }
            }
        }.background(Color(.red)).opacity(1)
    }
}.background(Color(.blue)).opacity(0.5) 

В этом случае элементы внутри горизонтального ScrollView никогда не go за пределами родительского ScrollView. Если я попробую .edgesIgnoringSafeArea(.all) в родительском ScrollView, и я запускаю приложение в альбомной ориентации, после первого взаимодействия кажется, что происходит некоторое изменение положения, но затем горизонтальный ScrollView отображается обрезанным при повороте в портретный режим.

Почему это происходит и как я могу добиться желаемого поведения? (Например: элементы Horizontal ScrollView отображаются за пределами их границ ScrollView при прокрутке, но все остальное остается в соответствии с SafeArea)

...