当前位置: 首页 > article >正文

ResizableSheet, SafeAreaInset 的使用

1. ResizableSheet 调整 View 视图大小

  1.1 实现

/// 调整 View 视图大小
struct ResizableSheetBootcamp: View {
    // 是否显示
    @State private var showSheet: Bool = false
    @State private var detents: PresentationDetent = .large
    
    var body: some View {
        Button("Click me!") {
            showSheet.toggle()
        }
        .sheet(isPresented: $showSheet) {
            MyNextView(detents: $detents)
                // large/medium 设置 View 的大小
                //.presentationDetents([.medium, .large])
                //.presentationDetents([.fraction(0.1), .height(300), .medium, .large])
                //.presentationDetents([.height(200)])
                //.presentationDetents([.fraction(0.5), .medium, .large], selection: $detents)
                // 隐藏指示器
                //.presentationDragIndicator(.hidden)
                // View 向下拖动,不能被关闭
                //.interactiveDismissDisabled()
        }
        //.onAppear {
        //    showSheet = true
        //}
    }
}

/// 下一个View
struct MyNextView: View{
    @Binding var detents: PresentationDetent
    var body: some View{
        ZStack{
            Color.red.ignoresSafeArea()
            VStack(spacing: 20) {
                Button("20 %") {
                    detents = .fraction(0.2)
                }
                Button("Medium") {
                    detents = .medium
                }
                Button("600 PX") {
                    detents = .height(600)
                }
                Button("Large") {
                    detents = .large
                }
            }
        }
        .presentationDetents([.fraction(0.2), .medium, .height(600), .large], selection: $detents)
        .presentationDragIndicator(.hidden)
    }
}

  1.2 展示图:

2. SafeAreaInset 安全区域添加控件

  2.1 实现

/// 安全区域添加控件
struct SafeAreaInsetBootcamp: View {
    var body: some View {
        NavigationStack{
            List(0..<10) { _ in
                Rectangle()
                    .frame(height: 300)
            }
            .navigationTitle("Safe Area Insets")
            // 固定导航栏
            //.navigationBarTitleDisplayMode(.inline)
            //.overlay(alignment: .bottom) {
            //    Text("Hi")
            //        .frame(maxWidth: .infinity)
            //        .background(Color.yellow)
            //}
            .safeAreaInset(edge: .top, alignment: .trailing, spacing: nil) {
                Text("Hi")
                    .frame(maxWidth: .infinity)
                    //.padding()
                    .background(Color.yellow.ignoresSafeArea(edges: .bottom))
                    //.clipShape(Circle())
                    //.padding()
            }
        }
    }
}

  2.2 展示图:


http://www.kler.cn/a/37302.html

相关文章:

  • html实现多种风格的时间轴(附源码)
  • SSM项目前后端分离+IDEA运行环境(含前端源码)(个人博客系统)
  • 并行计算框架Polars、Dask的数据处理性能对比
  • 基于Matlab电池组模型仿真(附上完整源码+说明文档)
  • 如何将一个目录下的所有md文件导出成pdf
  • WSL2 及 docker开发环境搭建
  • 常用API学习01(Java)
  • redis事务-pipeline-lua三者区别简单概括
  • C#基础学习_集合中对象的动态排序
  • spring-java面向切面拦截器
  • C/C++服务器和客户端交互笔记
  • MySQL (select查询的基本用法及select相关练习)
  • Linux操作系统——第五章 进程信号
  • 2. CSS3的新特性
  • SpringBoot + Kotlin 中使用 GRPC 进行服务通信
  • re学习(15)BUUCTF 2019红帽杯easyRe
  • 常用化合物谱图数据库查询系统-40个软件免费查!
  • 四、评估已建立的模型
  • 如何系统学习分布式?
  • Flink实时任务性能调优