SwiftUI 中自定义 container

简介: 自定义容器是在 Swift UI 中实现复杂布局和视图组合的强大工具。通过自定义容器,我们可以将一组视图组织在一起,以创建可重用的 UI 元素,同时保持一致的外观和行为。在本文中,我们将探讨如何使用自定义容器来实现一个主题,并深入了解其设计和实现细节。

SwiftUI 中自定义 container

自定义容器是在 Swift UI 中实现复杂布局和视图组合的强大工具。通过自定义容器,我们可以将一组视图组织在一起,以创建可重用的 UI 元素,同时保持一致的外观和行为。在本文中,我们将探讨如何使用自定义容器来实现一个主题,并深入了解其设计和实现细节。

在 Swift UI 中,容器是一种特殊类型的视图,它可以包含其他视图,并根据需要排列、组合和布局这些视图。Swift UI 提供了一些内置的容器视图,如 VStackHStackZStack,用于垂直、水平和层叠布局。然而,有时我们需要更灵活的布局方式,这就是自定义容器发挥作用的时候。

//
//  CustomContainer.swift
//  GuessFlag
//
//  Created by zhangyarn on 2022/11/13.
//

import SwiftUI

struct Mesh<Content: View> : View {
    

   let row : Int;
   let col: Int;
   @ViewBuilder let content: (Int, Int) -> Content;

   var body: some View {
    
       VStack{
    
           ForEach(0..<row) {
    r in
               HStack{
    
                   ForEach(0..<col) {
    c in
                       content(r,c);
                   }
               }
           }
       }
   }
}

struct CustomContainer: View {
    
   var body: some View {
    
//        Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
       Mesh(row: 3,col:3) {
    r, c in
           Image(systemName: "person")
           Text("R\(r) C\(c)")
               .padding()
       }
   }
}

struct CustomContainer_Previews: PreviewProvider {
    
   static var previews: some View {
    
       CustomContainer()
   }
}

上面的代码中我们定义了一个 Mesh 的 container, 它有两个参数 rowcol, 来画一个 row X col 的组成的一个网格。

相关文章
|
7月前
35avalon - 指令ms-widget(组件绑定介绍)
35avalon - 指令ms-widget(组件绑定介绍)
19 0
|
9月前
|
C#
WPF-Binding问题-模板样式使用Binding TemplatedParent与TemplateBinding区别
WPF-Binding问题-模板样式使用Binding TemplatedParent与TemplateBinding区别
97 0
|
10月前
electron setParentWindow绑定父窗口后,会出现center()不生效问题
在使用 Electron 的 `setParentWindow` 方法绑定父窗口后,有时会发现调用 center() 方法无效的情况。
85 0
|
小程序 容器
讲述小程序之组件视图容器之movable-area与movable-view
讲述小程序之组件视图容器之movable-area与movable-view
306 0
讲述小程序之组件视图容器之movable-area与movable-view
|
存储
SwiftUI100天:使用SwiftUI搭建一个单位转换App
在本章中,你将学会使用SwiftUI搭建一个单位转换App。
193 1
SwiftUI100天:使用SwiftUI搭建一个单位转换App
|
开发框架 小程序 Android开发
列表组件list-view的使用、flex布局教程,以APICloud AVM框架为例
avm.js是 APICloud 推出的多端开发框架。使用 avm.js 一个技术栈可同时开发 Android & iOS 原生 App、小程序和 iOS 轻 App,且多端渲染效果统一;全新的 App 引擎 3.0 不依赖 webView,提供百分百的原生渲染,保障 App 性能和体验与原生 App 一致。
458 0
SwiftUI极简教程10:State状态和Binding绑定的使用
SwiftUI极简教程10:State状态和Binding绑定的使用
915 0
SwiftUI极简教程10:State状态和Binding绑定的使用
|
开发者 iOS开发
SwiftUI—创建第一个SwiftUI项目
SwiftUI—创建第一个SwiftUI项目
798 0
SwiftUI—创建第一个SwiftUI项目
|
开发框架 小程序 开发工具
APICloud AVM框架列表组件list-view的使用、flex布局教程
avm.js 是APICloud 推出的多端开发框架。使用 avm.js 一个技术栈可同时开发 Android & iOS 原生 App、小程序和 iOS 轻 App,且多端渲染效果统一;全新的 App 引擎 3.0 不依赖 webView,提供百分百的原生渲染,保障 App 性能和体验与原生 App 一致。
175 0
APICloud AVM框架列表组件list-view的使用、flex布局教程
SAP Spartacus List Component 里定义的待显示 Popover 内容,如何传递到 Popover Component 里的?
SAP Spartacus List Component 里定义的待显示 Popover 内容,如何传递到 Popover Component 里的?
103 0
SAP Spartacus List Component 里定义的待显示 Popover 内容,如何传递到 Popover Component 里的?