Swiftui @ObservedObject更改时文本帧的快速UI高度动画

Swiftui @ObservedObject更改时文本帧的快速UI高度动画,swiftui,observedobject,Swiftui,Observedobject,当NetStatus发生变化时,我尝试制作一个平滑的动画,但它不能像我所希望的那样工作 我希望获得与使用切换动画按下按钮时相同的效果。注释按钮动画效果很好,我尝试通过缩放文本帧的高度来复制它 注释的按钮代码只是我想要的动画效果的一个工作示例(优雅地展开和关闭),我不需要这个代码 我该怎么做 import SwiftUI struct NoNetwork: View { let screenSize: CGRect = UIScreen.main.bounds @ObservedO

当NetStatus发生变化时,我尝试制作一个平滑的动画,但它不能像我所希望的那样工作

我希望获得与使用切换动画按下按钮时相同的效果。注释按钮动画效果很好,我尝试通过缩放文本帧的高度来复制它

注释的按钮代码只是我想要的动画效果的一个工作示例(优雅地展开和关闭),我不需要这个代码

我该怎么做

import SwiftUI

struct NoNetwork: View {
  let screenSize: CGRect = UIScreen.main.bounds
  
  @ObservedObject var online = NetStatus()
  
  var body: some View {
    
    VStack{
      Text("NoNetworkTitle")
        .fontWeight(.bold)
        .foregroundColor(Color.white)
        .frame(width: screenSize.width, height: self.online.connected ? 0 : 40, alignment: .center)
        // .animation(.easeIn(duration: 5))
        .background(Color.red)
      
//      Button(action: {
//        withAnimation {
//          self.online.connected.toggle()
//        }
//      }, label: {
//        Text("Animate")
//      })
      
    }
  }
}

struct NoNetwork_Previews: PreviewProvider {
  static var previews: some View {
    NoNetwork()
  }
}


要在
联机时设置动画。已连接的
更改,请将
.animation
修改器放在
VStack
上:

VStack{
  Text("NoNetworkTitle")
    .fontWeight(.bold)
    .foregroundColor(Color.white)
    .frame(width: screenSize.width, height: self.online.connected ? 0 : 40, alignment: .center)
    .background(Color.red)
  
  Button(action: {
      self.online.connected.toggle()
  }, label: {
    Text("Animate")
  })
  
}
.animation(.easeInOut(duration: 0.5))
文本出现和消失时,这将为
VStack
中的其他视图设置动画