TabView с PageTabViewStyle () не использует доступную высоту в ScrollView

Итак, у меня есть TabView, как показано ниже, но когда я пытаюсь реализовать его в ScrollView, мне всегда приходится задавать ему фиксированную высоту. Есть ли способ указать tabview использовать пространство, которое ему нужно в scrollView? Я не знаю высоты внутреннего содержимого (которое, кстати, меняется со временем) TabView, поэтому фиксированная высота мне не подходит.

Я пробовал.frame(maxHeight: .infinity), но, похоже, это не работает

import SwiftUI

struct TEST: View {
    var body: some View {
        ScrollView {
            TabView {
                Text("Hello World")
            }
            .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
            .frame(maxHeight: .infinity)
            // only .frame() with fixed Height works...
        }
    }
}

1 ответ

Решение

Вам нужно использовать фиксированную высоту, такую ​​как высота экрана, потому что у scrollview есть бесконечная высота. Поэтому, когда вы устанавливаете бесконечную высоту объекта внутри scrollview, он занимает только пространство, которое действительно нужно содержимому. Я рекомендую вам использовать высоту экрана в TabView следующим образом:

.frame(высота: UIScreen.main.bounds.height)

Или использовать GeometryReader, который дает вам высоту, взятую ScrollView, а затем примените ее к фрейму TabView следующим образом:

      struct MyView: View {
     var body: some View {
          GeometryReader { proxy in
               ScrollView {
                    TabView {
                         Text("Hello World")
                    }
                    .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
                    .frame(height: proxy.size.height)
                }
            }
    
        }
}
Другие вопросы по тегам