SwiftUI 示例、技巧和技术集合:这个集合旨在帮助您构建应用程序、解决问题,并了解 SwiftUI 的实际工作方式。主要内容来源于 hackingwithswift.com,所有示例都是在 macOS Big Sur 系统上运行,基于 Xcode 12.4 开发。
此外,我还制作了一个 Swift/SwiftUI 速查手册应用,您可以通过速查手册快速查阅资料,边动手开发应用,轻松上手。您可以通过以下链接下载:
🚧 注意事项: 这些示例适用于 macOS/iOS 上的 Swift 编程(主要是 macOS),文字解释内容是通过 Google 翻译完成的,英文水平有限,欢迎大家参与修改和完善。部分内容进行了添加或修改,并且有些部分是新增的。如果您对 Swift 语法不熟悉,可以参考 Swift 语法入门,而如果对 SwiftUI 不熟悉,提供了一个 SwiftUI 速查手册 供您参考。
🚧 版权声明: 内容版权归 hackingwithswift.com 原作者所有,本站不承担任何法律责任或风险,且不以商业为目的。如果您认为本站的内容侵犯了您的版权,请及时联系我们。同时,本站无法完全保证内容的准确性,使用本站内容所带来的任何风险由用户自行承担。使用本站即表示您已接受本站的使用条款和隐私政策。
为了方便在 Swift 中进行颜色拾取,提供了一个 Web 小工具 UI-Color,此外还提供了一个桌面应用 Palette Genius,该应用汇集了许多颜色,并且包含一个颜色选择转换器。欢迎大家提出改进意见。
只是讨论 SwiftUI 事物的地方 论坛→。想法来源于 sindresorhus/swiftui
✦ 欢迎下载我的 macOS/iOS 应用程序来支持我,谢谢 ✦
- 介绍
- 建立一个完整的项目
- 使用静态文本
- 图像形状和媒体
- 视图布局
- 堆栈网格滚动视图
- 用户界面控件
- 响应事件
- 点击和手势
- 状态
- 列表
- 表单
- 容器
- 对话框和菜单
- 切换界面
- 转换视图
- 绘画
- 动画
- 排版视图
- 跨平台-swiftui
- 数据
- 辅助功能
- 工具
- 附录a
速查手册
简要介绍 SwiftUI 的基础
- 不要惊慌!
- 什么是 SwiftUI?
- SwiftUI 与 Interface Builder 和 storyboards
- 有关 SwiftUI 的常见问题
- 回答这个大问题:你应该学习 SwiftUI,UIKit,还是两者都学?
- 如何遵循这个快速入门指南?
- 从 UIKit 迁移到 SwiftUI
- 基本模板是什么?
- 贡献
通过实际的应用程序项目学习 SwiftUI
整齐地布局文本
- 如何使用
Text视图创建静态标签? - 如何使用字体,颜色,行距等为文本视图设置样式?
- 如何使用
multilineTextAlignment()调整文本对齐方式? - 如何在文本视图中设置文本格式?
- 如何在文字中的字母之间增加空格?
- 如何在文字检视中格式化日期?
- 如何使用
textCase()使TextField大写或小写? - 如何使用
Label并排显示文本和图标? - 如何使用
redacted()将内容标记为占位符? - 如何使用
privacySensitive()将内容标记为私有? - 如何在文本中呈现
Markdown内容? - 如何让用户选择文本?
绘制图标,圆形,渐变等
- 如何使用图像视图绘制图像?
- 如何调整图像适合其空间的展示方式?
- 如何平铺图像?
- 如何使用SF符号渲染图像?
- 如何渲染渐变?
- 如何使用图像和其他视图作为背景?
- 如何显示实体形状?
- 如何同时填充和描边形状?
- 如何使用
trim()绘制实体形状的一部分? - 什么时候应该使用
ContainerRelativeShape? - 如何使用
VideoPlayer播放电影? - 如何使用
SpriteView集成SpriteKit? - 如何从 URL 加载远程图像?
- 如何使用 SF Symbols 获得自定义颜色和透明度?
布局大小,优先级和间距
- 如何给视图定制
frame? - 如何使用
padding来控制各个视图之间的间距? - 如何使用
GeometryReader提供相对大小? - 如何将内容放置在安全区域之外?
- 如何返回不同的视图类型?
- 如何使用
ForEach循环创建视图? - 如何使用
layoutPriority()控制布局优先级? - 如何使两个视图具有相同的宽度或高度?
- 如何使用
foregroundStyle()提供视觉结构?
以结构化方式定位视图
- 如何使用
VStack和HStack创建堆栈? - 如何使用对齐
alignment和间距spacing自定义堆栈布局? - 如何使用
Spacer将视图强制移到堆栈中的一侧? - 如何制作固定尺寸的
Spacer? - 如何使用
ZStack在彼此之上叠加视图? - 如何使用
zIndex更改视图分层的顺序? - 如何使用尺寸类创建不同的布局?
- 如何根据大小类在
HStack和VStack之间自动切换? - 如何使用
ScrollView添加水平和垂直滚动? - 如何使用
ScrollViewReader使滚动视图移动到某个位置? - 如何使用
ScrollView和GeometryReader创建3D效果(如Cover Flow)? - 如何使用
LazyVGrid和LazyHGrid在网格中放置视图? - 如何使用
LazyVStack和LazyHStack延迟加载视图? - 如何使用
HSplitViews创建左中右三栏布局? - 如何添加视觉效果模糊?
响应交互并控制程序状态
- 使用状态
- 如何创建可点击的按钮?
- 如何禁用
Button和NavigationLink中的图像的覆盖颜色? - 如何从
TextField读取文本? - 如何在
TextField上添加边框? - 如何将占位符添加到
TextField? - 如何在
TextField中禁用自动更正? - 如何关闭
TextField的键盘? - 如何格式化数字的
TextField? - 如何使用
SecureField创建安全的文本字段? - 如何创建拨动开关?
- 如何创建滑块
Slider并从中读取值? - 如何创建选择器
Picker并从中读取值? - 如何创建日期选择器
DatePicker并从中读取值? - 如何创建分段控件并从中读取值?
- 如何创建步进器
Stepper并从中读取值? - 如何使用
labelsHidden()隐藏Picker,Stepper,Toggle等标签? - 如何使用文本编辑器创建多行可编辑文本
TextEditor? - 如何让用户使用
ColorPicker选择颜色? - 如何使用
ProgressView显示任务的进度? - 如何使用
ProgressView显示不确定的进度? - 如何显示地图
Map视图? - 如何在地图
Map视图中显示注释? - 如何在
Safari中打开 Web 链接? - 如何设置可编辑文本
TextEditor背景颜色? - 如何自定义
TextField、SecureField和TextEditor的提交按钮? - 当用户提交 TextField 时如何执行事件?
- 如何获得突出的边框按钮?
快捷方式,旋转方式和外观
- 如何使用
scenePhase检测您的应用何时移至背景或前景? - 如何响应查看生命周期事件:
onAppear()和onDisappear()? - 如何使用
keyboardShortcut()添加键盘快捷键? - 如何控制应用启动时显示的视图?
- 应用启动时如何运行代码?
- 如何将
AppDelegate添加到 SwiftUI 应用? - 如何检测设备旋转?
- 如何在键盘上添加工具栏?
- 显示视图时如何运行异步任务?
滑动,轻击,摇动和其他输入
- 如何在视图中添加手势识别器?
- 如何阅读点击和双击手势?
- 如何使用
highPriorityGesture()强制一个手势先识别另一个手势? - 如何使用
simultaneousGesture()同时识别两个手势? - 如何使用
sequenced(before:)创建手势链? - 如何检测到用户将鼠标悬停在视图上?
- 如何检测摇动手势?
- 如何使用
contentShape()控制视图的可点击区域? - 如何使用
allowsHitTesting()禁用视图的点击?
响应交互并控制程序状态
@ObservedObject,@State和@EnvironmentObject有什么区别?- 如何使用
@StateObject创建和监视外部对象? - 如何使用
@ObservedObject管理外部对象的状态? - 如何使用
@EnvironmentObject在视图之间共享数据? - 如何使用
objectWillChange手动发送状态更新? - 如何创建常量绑定?
- 如何创建自定义绑定?
- 如何在
SwiftUI中使用计时器? - 当使用
onChange()改变状态时如何运行一些代码?
创建数据滚动表
- 使用列表
List - 如何创建静态物品列表?
- 如何创建动态项目列表?
- 如何让用户从列表中删除行?
- 如何让用户在列表中移动行?
- 如何将
Section添加到列表? - 如何使用
EditButton启用对列表的编辑? - 如何使用
listRowBackground()设置列表行的背景色? - 如何创建分组和插入分组列表?
- 如何创建扩展列表?
- 如何滚动到列表中的特定行?
- 如何允许列表中的行选择?
- 如何使用隐式堆栈?
快速有效地获得用户输入
将视图放置在导航控制器等中
- 使用容器
- 如何在导航视图中嵌入视图?
- 如何将栏项目添加到导航视图?
- 如何使用
TabView将视图嵌入选项卡栏中? - 如何使用
tabViewStyle()创建内容的滚动页面? - 如何将视图组合
Group在一起? - 如何隐藏和显示状态栏?
- 如何使用
DisclosureGroup隐藏和显示内容? - 如何创建工具栏并向其中添加按钮?
- 如何为
iPadOS添加侧边栏? - 如何隐藏和显示
NavigationView侧边栏?
发生某些情况时显示模式通知
- 使用简介
- 如何显示
alert? - 如何为
alert按钮添加动作? - 如何在单个视图中显示多个
alert? - 如何显示动作面板?
- 如何显示上下文菜单?
- 如何使用
appStoreOverlay()推荐另一个应用程序? - 按下按钮时如何显示菜单?
- 如何让用户从菜单中选择选项?
- 如何更改 macOS 应用中主菜单?
- 如何添加偏好设置界面?
将您的用户从一个视图移动到另一个视图
- 如何将新视图推送到
NavigationView上? - 点击列表行时如何推送新视图?
- 如何在
SwiftUI中使用程序化导航? - 如何使用
sheets呈现新视图? - 如何使视图自行关闭?
- 如何显示弹出视图?
剪辑,大小,比例,旋转等
- 如何使用其偏移量调整视图的位置
offset? - 如何为视图周围的填充着色?
- 如何堆叠修改器以创建更高级的效果?
- 如何在视图周围绘制边框?
- 如何在视图内绘制边框?
- 如何创建行军蚂蚁边框动画效果?
- 如何在视图周围绘制阴影?
- 如何裁剪视图,以便仅部分可见?
- 如何旋转视图?
- 如何旋转 3D 视图?
- 如何放大或缩小视图?
- 如何圆角化一个视图?
- 如何调整视图的不透明度?
- 如何调整视图的强调色?
- 如何用一个视图掩盖另一个视图?
- 如何模糊视图?
- 如何将视图融合在一起?
- 如何通过着色,去饱和等来调整视图?
- 使用
ButtonStyle自定义按钮 - 使用
ProgressViewStyle自定义ProgressView - 使用
ToggleStyle自定义Toggle - 如何更改
ListTextEditor等的背景色
使用自定义形状控制渲染
通过运动使您的界面栩栩如生
- 如何创建基本动画?
- 如何制作弹簧动画?
- 如何为绑定值的变化制作动画?
- 如何创建显式动画?
- 如何延迟动画?
- 视图出现后如何立即启动动画?
- 如何在一个视图中应用多个动画?
- 如何使用 matchedGeometryEffect() 将动画从一个视图同步到另一个视图?
- 如何通过过渡添加和删除视图?
- 如何创建不对称过渡?
- 如何创建自定义过渡?
- 如何设置文字大小的动画?
- 如何用事务覆盖动画?
使您的UI结构更易于理解
- 如何创建和组合自定义视图?
- 如何将文本视图结合在一起?
- 如何将视图存储为属性?
- 如何创建自定义修改程序?
- 如何为
SwiftUI包装自定义UIView? - 如何为
UIViewRepresentable结构创建修饰符? - 如何将图像插入文本?
学习让您的应用在任何地方都看起来很棒
- 学习一次,随处应用
- 如何在
macOS上获取半透明列表? - 如何在
watchOS上制作轮播列表? - 如何使用
digitalCrownRotation()在watchOS上读取Digital Crown?
通过 Core Data 集成和更多功能处理数据
- 在
SwiftUI中使用Core Data的简介 - 如何配置核心数据以与
SwiftUI一起使用? - 如何从
SwiftUI视图访问Core Data管理的对象上下文? - 如何使用
@FetchRequest创建核心数据获取请求? - 如何使用
predicate过滤核心数据获取请求? - 如何从
SwiftUI视图添加Core Data对象? - 如何从
SwiftUI视图中删除Core Data对象? - 如何限制获取请求中的项目数?
- 如何使用
FileDocument和DocumentGroup创建基于文档的应用程序? - 如何使用
fileExporter()导出文件? - 如何在
SwiftUI中继续NSUserActivity? - 如何使用
LocationButton读取用户的位置?
如何使每个人都能使用您的应用
使用Xcode的帮助构建更好的应用程序
- 如何以不同的动态类型大小预览布局?
- 如何在亮(light)和黑暗(dark)模式下预览布局?
- 如何在不同的设备中预览布局?
- 如何在导航视图中预览布局?
- 如何使用
Instruments来配置您的 SwiftUI 代码并识identify布局? - 如何在
SwiftUI中使用Touch ID和Face ID? - 如何在 Xcode 中添加创建
Swift包依赖? - 如何以纵向或横向预览布局?
- 如何查找导致 SwiftUI 视图更新的数据更改?
如何使用每个 SwiftUI 属性包装器
- 了解 Swift 和 SwiftUI 中的属性包装器
- 所有 SwiftUI 属性包装器都进行了解释和比较
- 什么是
@State属性包装器? - 什么是
@StateObject属性包装器? - 什么是
@Published属性包装器? - 什么是
@ObservedObject属性包装器? - 什么是
@EnvironmentObject属性包装器? - 什么是
@Environment属性包装器? - 什么是
@Binding属性包装器? - 什么是
@GestureState属性包装器? - 什么是
@FetchRequest属性包装器? - 什么是
@AppStorage属性包装器? - 什么是
@SceneStorage属性包装器? - 什么是
@ScaledMetric属性包装器? - 什么是
@UIApplicationDelegateAdaptor属性包装器?
一如既往,感谢我们出色的贡献者!
使用 action-contributors 制作。
Licensed under the MIT License.


















