我想在 SwiftUI 中實作一個影片,它“顯示”視圖的內容以啟用展開/折疊功能。我想要折疊和展開的視圖的內容很復雜:它不僅僅是一個簡單的框,而是一個動態高度和內容的視圖層次結構,包括影像和文本。
我嘗試了不同的選擇,但沒有達到預期的效果。通常發生的情況是,當我“展開”時,整個視圖立即顯示為 0% 不透明度,然后逐漸淡入,同時展開視圖下的按鈕向下移動。這就是當我使用if實際添加和洗掉視圖的條件陳述句時發生的情況。所以這是有道理的。
然后我嘗試使用frame修飾符:.frame(maxHeight: isExpanded ? .infinity : 0). 但這導致視圖的內容被“壓縮”而不是被顯示。
我制作了我想要的紙質原型:

關于如何實作這一目標的任何想法?
uj5u.com熱心網友回復:
像這樣的事情可能會奏效。您可以將要公開的內容的高度修改為隱藏或nil不隱藏時為 0,以便達到視圖定義的高度。確保之后剪輯視圖,以便在未公開時內容在框架高度之外不可見。
struct ContentView: View {
@State private var isDisclosed = false
var body: some View {
VStack {
Button("Expand") {
withAnimation {
isDisclosed.toggle()
}
}
.buttonStyle(.plain)
VStack {
GroupBox {
Text("Hi")
}
GroupBox {
Text("More details here")
}
}
.frame(height: isDisclosed ? nil : 0, alignment: .top)
.clipped()
HStack {
Text("Cancel")
Spacer()
Text("Book")
}
}
.frame(maxWidth: .infinity)
.background(.thinMaterial)
.padding()
}
}
不,這也不是要與您的設計相匹配。這只是為了提供創建影片的示例方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383831.html
