SwiftUI как использовать модификатор .FixedSize() с TabView, чтобы занимать только необходимое пространство?

#ios #swift #swiftui #swiftui-tabview

Вопрос:

У меня есть а TabView , которое вложено в а ZStack . Моя цель состоит в том, чтобы сделать ZStack так, чтобы ребенок TabView занимал только пространство, необходимое для размещения видов внутри TabView . .fixedSize() Модификатор выполняет это, если я изменяю свой TabView на a VStack , но с помощью a TabView он сжимает TabView слишком маленький. Как я могу достичь своей цели, не скрывая TabView при этом ее содержание?

введите описание изображения здесь

 struct ContentView: View {
    var body: some View {
        ZStack {
            Color.red
            
            TabView {
                VStack {
                    Text("One")
                    Text("One")
                    Text("One")
                }
                VStack {
                    Text("Two")
                    Text("Two")
                    Text("Two")
                }
                VStack {
                    Text("Three")
                    Text("Three")
                    Text("Three")
                }
            }
            .tabViewStyle(.page)
            
        }
        
        .fixedSize() //why doesn't this work as expected?
        
    }
}
 

Комментарии:

1. Ответ на ваш вопрос заключается в том , что TabViews , например ScrollViews ListViews , и т. Д., Не имеют внутреннего размера. .fixedSize уменьшает размер представления до его внутреннего или естественного размера. Таким .fixedSize образом, надев их, вы уменьшаете их размеры до неузнаваемости. Единственное, что уменьшило TabView бы это должным образом, — это поставить .frame() на нем «а».

2. Спасибо @Yrb, но я не хочу использовать жестко заданную высоту кадра по причинам разных размеров экрана и динамических размеров текста, какие еще варианты существуют для того, чтобы этот вид вкладок был только того размера, который ему нужен?

3. Хотя я могу понять, что вы не хотите жестко их кодировать, возможно, вы сможете придумать какую-то ценность. Я попробовал найти решение, PreferenceKeys но оно не сработало. Я не думаю, что они когда-либо думали, что a TabView будет использоваться подобным образом.