我正在嘗試在其父視圖底部的視圖中設定影片。這通過影片偏移相對容易做到,如下所示:
struct ContentView: View {
@State var isShowingBanner = true
var bannerOffset: CGFloat {
isShowingBanner ? 0 : 60
}
var body: some View {
VStack {
VStack {
Spacer()
BannerView()
.offset(y: bannerOffset)
}
.border(Color.black, width: 1.0)
.clipped()
Spacer()
Button("Toggle Banner") {
withAnimation {
isShowingBanner.toggle()
}
}
}
.padding()
}
}

最明顯的問題是,這只是對影片偏移使用了任意值,并且在考慮動態型別時會很快中斷

我的問題是:
有沒有辦法正確確定高度BannerView以正確調整此影片。或者有沒有更好的方法來達到這個效果?
謝謝大家
uj5u.com熱心網友回復:
它可以通過過渡來完成,比如

使用 Xcode 13.3 / iOS 15.4 測驗
struct ContentView: View {
@State var isShowingBanner = true
var body: some View {
VStack {
VStack {
Spacer()
if isShowingBanner {
BannerView()
.transition(.move(edge: .bottom)) // << here !!
}
}
// >> empty container should not shrink !!
.frame(maxWidth: .infinity, maxHeight: .infinity)
.border(Color.black, width: 1.0)
.clipped()
Spacer()
Button("Toggle Banner") {
withAnimation {
isShowingBanner.toggle()
}
}
}
.padding()
}
}
uj5u.com熱心網友回復:
如果要確定 BannerView() 的高度,可以使用 GeometryReader。我已經創建了 BannerView() 僅舉例如下: -
struct BannerView() : View {
@Binding var height : CGFloat
var body: some View {
VStack{
GeometryReader { proxy in
Rectangle().fill(.green).onAppear {
height = proxy.size.height
}
}
}.frame(height : 100)
}
}
因此,Binding 值將為您的 MainView() 提供橫幅視圖的高度。您可以使用它來確定您的偏移量。
@State var isShowingBanner = true
@State var offsetHeight : CGFloat = 0
var body: some View {
VStack {
VStack {
Spacer()
BannerView(height: $offsetHeight)
.offset(y: isShowingBanner ? 0 : offsetHeight)
}
.border(Color.black, width: 1.0)
.clipped()
Spacer()
Button("Toggle Banner") {
withAnimation {
isShowingBanner.toggle()
}
}
}
.padding()
}
希望你發現這很有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473509.html
