#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() } В настоящее время я знаю, что могу обернуть его в кнопку, и это работает.