Размер всплывающего окна SwiftUI не увеличивается для соответствия содержимому - PullRequest
0 голосов
/ 03 августа 2020

Вот мой код

struct ContentView: View {
    
    @State var showingPopover = false
    
    var body: some View {
        VStack {
            Spacer()
            Text("Hello World")
            Spacer()
            HStack {
                Spacer()
                Button {
                    self.showingPopover.toggle()
                } label: {
                    Image(systemName: "plus.circle")
                }
                .popover(isPresented: $showingPopover) {
                    
                    List(0..<100) { Text("\($0)") }
                    
                }.padding(30)
            }
        }
    }
}

Это должно создать действительно красивое всплывающее окно, появляющееся при нажатии кнопки «плюс». Но все, что я получаю, - это действительно раздавленное всплывающее окно.

Скриншот

Есть идеи, что мне здесь не хватает? Есть ли способ указать всплывающему окну расширяться больше (без указания размера)?

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Вы можете использовать ScrollView и ForEach вместо List:

struct ContentView: View {
    @State var showingPopover = false

    var body: some View {
        VStack {
            Spacer()
            Text("Hello World")
            Spacer()
            HStack {
                Spacer()
                Button(action: {
                    self.showingPopover.toggle()
                }) {
                    Image(systemName: "plus.circle")
                }
                .padding(30)
            }
        }
        // can be attached to the button as well (as in the question)
        .popover(isPresented: $showingPopover,
                 attachmentAnchor: .point(.bottomTrailing),
                 arrowEdge: .bottom) {
            ScrollView(.vertical, showsIndicators: false) {
                ForEach(0 ..< 100) {
                    Text("\($0)")
                }
            }
        }
    }
}
1 голос
/ 03 августа 2020

Вы можете указать собственный frame для List. Кроме того, не забудьте встроить список в ScrollView, если вы хотите, чтобы он прокручивался.

ScrollView {
    List(0..<100) {
        Text("\($0)")
    }
    .frame(width: 100, height: 250)
}
...