SwiftUI, если встроенное представление

#swift #swiftui

#swift #swiftui

Вопрос:

Итак, у меня есть встроенное представление в моем MainView.Swift

 VStack(alignment: .leading){
                MediaPlayerView()
            }.frame(height: 250)
  

Что я хотел бы сделать, так это сообщить MediaPlayerView , что если высота его фрейма равна 250, тогда отображается содержимое X.

Но если нет высоты фрейма, тогда отображается содержимое Z.

Каков способ сделать это?

При полноэкранном режиме — я хочу, чтобы отображалась кнопка паузы воспроизведения. (Обратите внимание, что на изображениях не отображается кнопка паузы воспроизведения, поскольку она еще не закодирована.)Полноэкранный режим

Если не в полноэкранном режиме, я хочу, чтобы он преобразовал изображение и теперь воспроизводимую информацию в кнопку, которая может вызывать MediaPlayerView — и скрыть кнопку паузы воспроизведения. Встроенное представление.

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

1. @Asperi Надеюсь, что изображения и добавленные детали помогут. Я, честно говоря, не знаю, какой был бы лучший способ сделать это. Вот почему я подумал, что должен спросить.

Ответ №1:

Вы можете использовать GeometryReader для определения высоты вашего представления следующим образом:

 struct MediaPlayerView: View {
    var body: some View {
        GeometryReader { geo in
            if geo.size.height == 250 {
                Text("Height 250")
            } else {
                Text("Height something else")
            }
        }
    }
}
  

хотя, вероятно, было бы лучше передать параметр MediaPlayerView , сообщающий ему, что вы хотели бы показать.

Что-то вроде этого могло бы сработать:

 struct ContentView: View {
    @State private var fullView = false

    var body: some View {
        VStack(alignment: .leading) {
            MediaPlayerView(showFullView: self.fullView)
        }
        .frame(height: fullView ? 500 : 250)
        .onTapGesture {
            self.fullView.toggle()
        }
    }
}

struct MediaPlayerView: View {
    let showFullView: Bool
    
    var body: some View {
        VStack {
            if showFullView {
                Text("Full view")
            } else {
                Text("logo only")
            }
        }
    }
}
  

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

1. второй выглядит хорошо и, уверен, работает, но в идеале я хочу, чтобы он открывал лист .sheet(isPresented: self.$showingDetail) { MediaPlayerView() } В настоящее время я знаю, что могу обернуть его в кнопку, и это работает.