动画无法与GeometryReader和NavigationView组合使用



我有一个动画图像,它使用偏移量和计时器上下滑动。在结合GeometryReader和NavigationView之前,这完全可以正常工作。对于NavView和GeoReader这两个单独的应用程序,动画也可以正常工作。有什么解决方案吗?(我知道,在这个例子中不需要GeometryReader(

struct TestView: View{
@State var offsetSwipeUp: CGFloat = 0

var body: some View{
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
return NavigationView {
GeometryReader { geometry in
Image(systemName: "chevron.up")
.animation(.easeInOut(duration: 1))
.onReceive(timer){ _ in
if self.offsetSwipeUp == .zero{
self.offsetSwipeUp = -10
} else {
self.offsetSwipeUp = .zero
}
}
.offset(y: CGFloat(self.offsetSwipeUp))
.navigationBarTitle("")
.navigationBarHidden(true)
}
}
}
}

在这种情况下,修饰符的顺序看起来很重要。

以下变体有效。使用Xcode 11.4/iOS 13.4 进行测试

struct TestView: View {
@State var offsetSwipeUp: CGFloat = 0
var body: some View{
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
return NavigationView {
GeometryReader { geometry in
Image(systemName: "chevron.up")
.animation(.easeInOut(duration: 1))
.offset(y: CGFloat(self.offsetSwipeUp))
.navigationBarTitle("")
.navigationBarHidden(true)
}
}
.onReceive(timer){ _ in
if self.offsetSwipeUp == .zero{
self.offsetSwipeUp = -10
} else {
self.offsetSwipeUp = .zero
}
}
}
}

最新更新