swiftui - ScrollView 的 SwiftUI 动画
问题描述
我在 ZStack 中有两个视图(VStack),一个在另一个之上
第二个视图后面的第一个 VStack 用作菜单。顶部的第二个视图是主应用程序视图。
当我单击一个按钮时,我正在缩小主视图并将其移动到屏幕右侧以显示菜单。
每次我缩小或放大主视图时,我在主视图内都有一个 ScrollView,动画无法顺利运行,页面闪烁,看起来很难看。如果我删除 ScrollView 它工作得很好。
我试图用 List 替换 ScrollView ,但它没有解决闪烁保持不变的问题。
有没有办法解决这个故障?
下面是一个示例代码
struct ContentView: View {
var body: some View {
ZStack {
Menu()
VStack {
ScrollView(.vertical, showsIndicators: false) {
VStack(spacing:0) {
Header()
MainAppView()
}
}
TabBar()
}
.scaleEffect(self.openMenu ? 0.5 : 1, anchor: UnitPoint(x: 1.5, y: 0.5))
.animation(.easeInOut(duration: 0.2))
}
}
}
解决方案
由于缺少代码,我无法重复所有行为。我认为您有这个问题,因为您正在缩小ScrollView
并且它重新计算所有内容。尝试为它做一些偏移,而不是缩放,应该没有闪烁:
// replace this
.scaleEffect(self.openMenu ? 0.5 : 1, anchor: UnitPoint(x: 1.5, y: 0.5))
// with this:
.offset(x: self.openMenu ? 300 : 0)
推荐阅读
- python-3.x - 尝试在 Anaconda 上安装 pygame 时,Python 3.x 被降级为 Python 2.7
- c++ - 如何超链接到 QAbstractItemModel 中的项目?
- kubernetes - Openshift 一个应用程序的多个路由器
- python - 使用运行 Ubuntu 服务器但来自 Windows 平台的 Docker 映像录制语音时出错
- c# - 如何使用两个 dateTimePickers 填充列中的日期范围?
- reactjs - 防止表单在 ReactJs 中重置输入状态
- php - 雄辩的 updateOrCreate 总是创建
- jakarta-ee - 如何通过类名以编程方式注入 CDI bean
- java - 如何使用 javaCC 重复 0 或 1 个令牌
- node.js - 防止knex数据库连接池空闲时关闭