Кто-нибудь обновлял SwiftUI Popovers для работы в Xcode beta-3? - PullRequest
3 голосов
/ 05 июля 2019

Обновлен до Xcode beta-3, Popover устарел ... один ад пытался выяснить, как заставить его работать снова!?!?

  1. Это больше не "всплываетвверх "скользит снизу вверх.
  2. Он больше не позиционируется и не имеет правильного размера, занимает весь экран.
  3. После отклонения он больше не хочет появляться снова.

Это был старый код, который отлично работал ...

struct ExerciseFilterBar : View {
    @Binding var filter: Exercise.Filter

    @State private var showPositions = false

    var body: some View {
        HStack {
            Spacer()
            Button(action: { self.showPositions = true } ) {
                Text("Position")
            }
            .presentation(showPositions ? Popover(content: MultiPicker(items: Exercise.Position.allCases, selected:$filter.positions),
                                                  dismissHandler: { self.showPositions = false })
                                        : nil)
        }
        .padding()
    }
}

И это новый код ...

struct ExerciseFilterBar : View {
    @Binding var filter: Exercise.Filter

    @State private var showPositions = false

    var body: some View {
        HStack {
            Spacer()
            Button(action: { self.showPositions = true } ) {
                Text("Position")
            }
            .popover(isPresented: $showPositions) {
                MultiPicker(items: Exercise.Position.allCases, selected:self.$filter.positions)
                .onDisappear { self.showPositions = false }
            }
        }
        .padding()
    }
}

Я закончилиспользовать PresentationLink только для того, чтобы я мог двигаться дальше со всем остальным ...

struct ExerciseFilterBar : View {
    @Binding var filter: Exercise.Filter

    var body: some View {
        HStack {
            Spacer()
            PresentationLink(destination: MultiPicker(items: Exercise.Position.allCases, selected:$filter.positions)) {
                Text("Position")
            }
        }
        .padding()
    }
}

Он работает, насколько это касается тестирования, но это не поповер.

Спасибо за любые предложения!

Кстати, этот код находится в симуляторе iPad.

1 Ответ

0 голосов
/ 08 июля 2019

На OSX приведенный ниже код работает нормально

struct ContentView : View {

@State var poSelAbove = false
@State var poSelBelow = false
@State var pick : Int = 1

var body: some View {

    let picker = Picker(selection: $pick, label: Text("Pick option"), content:
    {
        Text("Option 0").tag(0)
        Text("Option 1").tag(1)
        Text("Option 2").tag(2)
    })

    let popoverWithButtons =
        VStack {
            Button("Not Dismiss") {
            }
            Divider()
            Button("Dismiss") {
                self.poSelAbove = false
            }
        }
        .padding()

    return VStack {
        Group {
            Button("Show button popover above") {
                self.poSelAbove = true
            }.popover(isPresented: $poSelAbove, arrowEdge: .bottom) {
                popoverWithButtons
            }

            Divider()
            Button("Show picker popover below") {
                self.poSelBelow = true
            }.popover(isPresented: $poSelBelow, arrowEdge: .top) {
                Group {
                    picker
                }
            }
        }
        Divider()
        picker
            .frame(width: 300, alignment: .center)
        Text("Picked option: \(self.pick)")
            .font(.subheadline)
    }
    // comment the line below for iOS
    .frame(width: 800, height: 600)
}

На iOS (iPad) всплывающее окно появится в странном прозрачном полноэкранном режиме.Я не думаю, что это предназначено.Я добавил проблему в свой существующий отчет об ошибке.

...