• SwiftUI 要点笔记


    SwiftUI

    要点笔记

    • resizable() 自适应大小 * 图片没有完全显示全,我们可以用Image的resizable()来让图片自动适应

    • .aspectRatio(contentMode: .fit) 设置图片的显示模式

    • Identifiable主要作用就是作为一个对象的唯一标识。能够与List一起列出。List可以像UITableViewController一样显示可标识集合中的数据列表

    • .frame(minWidth: 0, maxWidth: .infinity) 设置控件铺满整个屏幕

    • SwiftUI 有两种载入图片方式

      • 一种放到Assets.xcassets 文件夹中 Image("文件名")
      • 一种直接放到项目中 Image(uiImage: UIImage(imageLiteralResourceName: "文件名.文件格式"))

      出现No image named found in asset catalog for main bundle问题通常是没有正确使用好载入方式

    • clipped() 将View裁剪成矩形 默认情况下,视图的边界框架仅用于布局,因此超出框架边缘的任何内容仍然可见。使用clipped(antialiased:)修饰器可以隐藏超出这些边缘的任何内容。

    • UIScreen.main.bounds.width 获取屏幕大小

    • .resizable() .scaledToFit() 照片大小适中 Image("circle") .resizable() .scaledToFit() .frame(minWidth:nil, idealWidth: nil, maxWidth: UIScreen.main.bounds.width, minHeight: nil, idealHeight: nil, maxHeight: 300, alignment: .center )

    • 自定义上下左右任意圆角位置和度数 ` struct RoundedCorners: View { var color: Color = .blue var tl: CGFloat = 0.0 var tr: CGFloat = 0.0 var bl: CGFloat = 0.0 var br: CGFloat = 0.0

      var body: some View { GeometryReader { geometry in Path { path in

                let w = geometry.size.width
                let h = geometry.size.height
      
                // Make sure we do not exceed the size of the rectangle
                let tr = min(min(self.tr, h/2), w/2)
                let tl = min(min(self.tl, h/2), w/2)
                let bl = min(min(self.bl, h/2), w/2)
                let br = min(min(self.br, h/2), w/2)
      
                path.move(to: CGPoint(x: w / 2.0, y: 0))
                path.addLine(to: CGPoint(x: w - tr, y: 0))
                path.addArc(center: CGPoint(x: w - tr, y: tr), radius: tr, startAngle: Angle(degrees: -90), endAngle: Angle(degrees: 0), clockwise: false)
                path.addLine(to: CGPoint(x: w, y: h - br))
                path.addArc(center: CGPoint(x: w - br, y: h - br), radius: br, startAngle: Angle(degrees: 0), endAngle: Angle(degrees: 90), clockwise: false)
                path.addLine(to: CGPoint(x: bl, y: h))
                path.addArc(center: CGPoint(x: bl, y: h - bl), radius: bl, startAngle: Angle(degrees: 90), endAngle: Angle(degrees: 180), clockwise: false)
                path.addLine(to: CGPoint(x: 0, y: tl))
                path.addArc(center: CGPoint(x: tl, y: tl), radius: tl, startAngle: Angle(degrees: 180), endAngle: Angle(degrees: 270), clockwise: false)
            }
            .fill(self.color)
        }

      } } `

    • Decodable 能够从JSON文件中对其进行解码

    • swiftUI多选https://stackoverflow.com/questions/56706188/how-does-one-enable-selections-in-swiftuis-list

    • SwiftUI 制作内容类App的一般流程 SwiftUI基本思想

    数据驱动 创建个struct 用于结构化存储对象 创建个读写数据的data.swift 界面显示

    • mutating 类是引用类型,而结构和枚举是值类型。这意味着类对象共享该对象的单个实例,并在传递给任何函数或新对象时传递相同的引用,而值类型是创建其副本并仅传递值的类型 值类型,我们不能够直接修改属性 在值类型中向任何函数添加突变关键字可以使它们能够修改变量。在内部,当我们尝试突变值类型时,它不会mutate其值,但它会mutate持有该值的变量。

    • RandomAccessCollection 支持高效随机访问的集合

    • Spacer()可以将Stack撑开铺满全屏

    • edgesIgnoringSafeArea 忽略安全区域留海和底部

    • 容器都是有10个对象的限制 VStack HStack ZStack Group List

    • 获得struct名称的两种方式 print(String(reflecting: a.self)) print("(a.self)")

    • 泛型占位常用字符T(MyTypeParameter),U和V表面是占位符不是值

    • 超长文本可以有两种解决方案 直接省略 .scaledToFit() .lineLimit(nil) 自动缩小换行 minimumScaleFactor(0.3)

    • fixedSize() -> View 将视图固定为理想尺寸。

    • fixedSize(horizontal: Bool, vertical: Bool) -> View 将视图固定为指定尺寸的理想尺寸。

    • func listRowInsets(EdgeInsets?) -> View 设置插入列表时要应用于视图的插入占位填充。

    • func listRowBackground(V?) -> View 当放置在列表中时,在视图后面设置一个视图。

    • func listRowPlatterColor(Color?) -> View 设置当放置在列表中时应用于视图系统单元盘的颜色。

    要点笔记

    • alignment: 布局对齐格式, 默认为 .center

    • spacing: 子 View 的间距, 系统默认为 8

    • 如何把 View 分到 左右两边

      • 中间增加 Spacer() Spacer 会使用父视图所有的空间,彻底的展开,不需要通过指定内容大小等属性,插入Spacer就相当于插入空白占位空间,比如说想让某个组件居中,可以左右各插入一个Spacer。
    • renderingMode 图片渲染样式,一般设置原始样式original

    • layoutPriority 设置父级布局应将空间分配给子级的优先级。默认优先级为0。在一组同级视图中,提高视图的布局优先级会鼓励该视图在缩小组时缩小,而在拉伸组时更快。当空间不够的情况下,优先级越高,展示的越完善,其他同级的子控件会压缩空间显示

    • position(CGPoint) -视图的中心点设置 将视图的中心固定在其父级坐标空间中的指定点 position(x: CGFloat, y: CGFloat) -> View 将视图的中心固定在其父级坐标空间中的指定坐标处

    • offset(x: CGFloat, y: CGFloat) 使视图偏移指定的水平和垂直距离

    • edgesIgnoringSafeArea(Edge.Set) 将视图扩展到指定边缘的安全区域之外

      问题记录

      List的子视图上添加Button,Button事件会覆盖整个子视图,也就是List中cell的点击事件也会触发Button点击事件

    1. SwiftUI 中使用 UIView 子类,需要将其他 view 包装在遵循 UIViewRepresentable 协议

    2. UIViewRepresentable 协议需要实现两个方法:

      • makeUIView(context:) 用来创建视图,
      • updateUIView(_:context:) 用来配置 view 并响应修改。
    3. 可以用这个 coordinator 实现常见的 Cocoa 模式,例如代理、数据源以及通过 target-action 响应用户事件。SwiftUI 会在调用 makeUIViewController(context:) 方法之前调用 makeCoordinator() 方法,这样配置 view controller 时,我们可以访问 coordinator 对象。

    • truncationMode 太长而无法容纳可用空间的文本行设置截断模式

    • ViewModifier视图修改器,可以用于将视图布局修饰样式抽离封装 func modifier(T) -> ModifiedContent<Self, T> 将修改器应用于视图。

       struct SearchBarTextModifier: ViewModifier {
           func body(content: Content) -> some View {
               content
                   .frame(height:40)
                   .padding(EdgeInsets(top: 0, leading: 8, bottom: 0, trailing: 8))
                   .border(Color.gray,4)
                   .cornerRadius(8)
                   .padding(EdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 4))
           }
       }
    TextField("Search",text: $searchStr)
    .modifier(SearchBarTextModifier())
  • 相关阅读:
    [ubuntu] aptget 详解
    zoj 1048 求平均数 python
    zoj 1001 A+B Python版本
    HustOj 数据库分析(r1292) [—夏 夏 ]
    poj 3020 Antenna Placement 夜
    poj 3349 Snowfalke Snow Snowflakes 夜
    poj 1062 昂贵的聘礼 夜
    poj 3368 Frequent values 夜
    poj 2524 Ubiquitous Religions 夜
    poj 1273 Drainage Ditches 夜
  • 原文地址:https://www.cnblogs.com/liuxiaokun/p/12676966.html
Copyright © 2020-2023  润新知