animation - SwiftUI ScrollView SafeArea 问题
问题描述
我有一个自定义模式视图(使用 ZStack),它有一个 ScrollView。这个模态视图是弹簧动画打开到全屏忽略所有安全区域。
然而,当我的模态视图顶部到达顶部安全区域(y:40)时,动画效果非常好。内部的滚动视图根据需要从其父视图的顶部跳转到设备的顶部,这使得动画看起来很糟糕。
关于如何解决这个问题的任何想法?
这以最简单的形式展示了我正在使用的内容......
import SwiftUI
struct ModalView: View {
@Binding var padding: CGFloat
@Binding var cornerRadius: CGFloat
@Binding var imageHeightMultiple: CGFloat
var body: some View {
ZStack {
ScrollView(.vertical, showsIndicators: false) {
GeometryReader { geo in
Image("image_1")
.renderingMode(.original)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: geo.size.width, height: geo.size.height)
.background(Color.gray)
.clipped(antialiased: true)
}
.frame(height: UIScreen.main.bounds.width * imageHeightMultiple)
}
}
.background(Color.white)
.cornerRadius(cornerRadius)
.padding(.horizontal, padding)
}
}
#if DEBUG
struct ModalView_Previews: PreviewProvider {
@State static var padding: CGFloat = 16
@State static var cornerRadius: CGFloat = 20
@State static var imageHeightMultiple: CGFloat = 0.7
static var previews: some View {
return ZStack {
Color(.gray)
.edgesIgnoringSafeArea(.all)
ModalView(padding: $padding, cornerRadius: $cornerRadius, imageHeightMultiple: $imageHeightMultiple)
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height - 80)
.position(x: UIScreen.main.bounds.width/2, y: UIScreen.main.bounds.height/2)
.edgesIgnoringSafeArea(.all)
}
.previewDevice(PreviewDevice(rawValue: "iPhone 11 Pro"))
}
}
#endif
解决方案
推荐阅读
- php - 如何在 laravel eloquent 中加入三个表
- excel - 将嵌入图像更改为链接
- javascript - 如何在 tinymce 4.9.2 上添加自定义插件?
- c# - Dynamics CRM:LINQ 中的复合键连接问题
- reactjs - 将material-ui版本从v4迁移到v5,发现情感问题
- python - 同时安装 Tensorflow 2.4 和 opencv?
- azure - 无法理解 Azure 的角色 JSON
- python - 变形金刚:获取 KeyError:model.fit 上的“sentence_embedding”
- php - WooCommerce 自定义产品类型选项不隐藏自定义产品选项卡
- android - 如何创建一个可以从 ViewModel 和 Activity 访问的函数?