首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让 SwiftUI 的列表变得更加灵活

前言 List 可能是 SwiftUI 附带的内置视图中最常用的一种,它使我们能够在任何 Apple 平台上呈现“类似于表格视图”的用户界面。...元素绑定和自定义滑动操作 接下来,让我们看看如何将完全自定义的滑动操作添加到列表中。...item 上调用的,而不是列表本身上调用,这我们提供了很大的灵活性,可以根据想要构建的 UI 类型动态隐藏或显示每个分隔符。...还有另外一个 API 用于控制部分分隔符的外观颜色,可以使用自定义颜色分隔符设置颜色——代码如下: struct ArticleList: View { @ObservedObject var...总结 SwiftUI 正在变得更加灵活和强大,后面我将继续探索更多新推出的 API,并在这里发布分享,欢迎持续关注,为了防止丢失,建议本号设置星标。

4.8K41
您找到你想要的搜索结果了吗?
是的
没有找到

SwiftUI 中实现视图居中的若干种方法

欢迎大家 Discord 频道[2] 中进行更多地交流将某个视图视图中居中显示是一个常见的需求,即使对于 SwiftUI 的初学者来说这也并非难事。...image-20220829152914736将合成后的视图放置某个可能会充满屏幕的视图的顶部或底部显示结果或者与你的预期不符 VStack { // Hello world 视图 1...布局容器设置明确的 spacing 是一个好习惯,未明确指定时,HStack、VStack 进行布局时可能会出现某些异常。下文中也会碰到此种情况。...将按照对齐指南 center 进行对齐( 看起来就是 Text 显示 Color 的中间 )如果将代码改写成下面的方式就会出现问题:ZStack { // 不明确设置 VStack spacing...我本文这种通过多种方法来解决一个问题的方式添加了【小题大作】标签,目前使用该便签的文章还有: Core Data 中查询和使用 count 的若干方法[6]、 SwiftUI 视图中打开 URL

6.6K40

掌握 SwiftUI 的 Safe Area

掌握 SwiftUI 的 Safe Area 访问我的博客 www.fatbobman.com[1] 可以获得更好的阅读体验 Safe Area(安全区域)是指不与导航栏、标签栏、工具栏或其他视图控制器提供的视图重叠的内容空间...对于视图层次上的其他视图,safeAreaInesets 只反映视图中被覆盖的部分。如果一个视图可以完整地放置视图的安全区域中,该视图的 safeAreaInsets 0。...当视图尚未在屏幕上可见时,该视图的 safeAreaInset 也 0 。...•keyboard与显示视图内容上的任何软键盘的当前范围相匹配的安全区域。...iPhone 13 下的表现 safeAreaTabbarDemo1 我们只调整了安全区域, SwiftUI 会自动不同的设备上进行适配( iPhone 13 上,状态条的高度 40 + HomeIndeicator

7.5K31

SwiftUI中使用UIKit视图

相当长的时间中开发者仍需SwiftUI中依赖UIKit(AppKit)代码。好在,SwiftUI开发者提供了便捷的方式将UIKit(AppKit)视图(或控制器)包装成SwiftUI视图。...SwiftUI中,开发者视图创建描述,而并不实际渲染它们。...协调器中,我们可以通过双向绑定(Binding),通知中心(notificationCenter)或其他例如Redux模式的单项数据流等方式,将UIKit视图内部的状态报告给SwiftUI框架或其他需要的模块...Introspect for SwiftUI 版本2代码中,我们TextFieldWrapper添加了clearButtonMode的设置,也是我们唯一增加的目前TextField尚不支持的设定。...希望本文能对你学习和了解如何将UIKit组件导入SwiftUI提供一点帮助。

8.1K20

Ask Apple 2022 与 SwiftUI 有关的问答(上)

Ask Apple 开发者与苹果工程师创造了 WWDC 之外进行直接交流的机会。本文对本次活动中与 SwiftUI 有关的一些问答进行了整理,并添加了一点个人见解。本文上篇。...假设我们想创建一个类似于 iMessage 的视图,在那里你可以看到一个信息列表(与本例无关),视图的底部有一个文本框。当用户点击文本字段时,键盘会在其工具栏中出现一个文本字段。...另外,按照这种方法,@FocusState 变量会变得没有反应,而且它不能被设置 nil( 返回到以前的视图并没有移除键盘 )。是否可以SwiftUI 中完成( 不使用 UIKit )?...MVVMQ: UIKit 时代,MVVM 是一种常见的架构,视图显示的数据来自一个单独的 viewModel 类。...在有些情况下,我想根据视图是否折叠来做决定( 例如,如果展开,详细视图显示一条信息,如果折叠,则显示一个警告或其他指示 )。

12.2K20

【visionOS】从零开始创建第一个visionOS程序

每个场景都包含要显示视图和控件,场景类型决定内容是采用2D还是3D外观。SwiftUIvisionOS添加了3D场景类型,还为所有场景类型添加了3D元素和布局选项。...将3D内容添加到应用程序中 您的visionOS应用程序添加深度和维度,并发现如何将您的应用程序内容融入人的周围环境。 带有立体显示器的设备可以让人们以一种感觉更真实的方式体验3D内容。...下面的例子展示了一个使用RealityView来显示3D球体的视图视图闭包中的代码球体创建一个RealityKit实体,球体表面应用纹理,并将球体添加到视图的内容中。...要创建一个volume,添加一个WindowGroup场景到你的应用程序,并将其样式设置volumetric。这个样式告诉SwiftUI3D内容创建一个窗口。卷中包含您想要的任何2D或3D视图。...系统显示时间设置每个窗口和音量的初始位置。系统还增加了一个窗口条,允许用户重新定位窗口或调整窗口大小。

68840

SwiftUI 布局 —— 尺寸( 上 )

第二阶段 —— 安置子民 该阶段,父视图将根据 SwiftUI 布局系统提供的屏幕区域( 由第一阶段计算得出 )视图设置渲染的位置和尺寸( 上方的 5-6 )。...因此,为了简化文字,我们文章中会将父视图与具备布局能力的容器等同起来。 不过需要注意的是, SwiftUI 中,有一类视图是会在视图树上显示视图,但并不具备布局能力。...,需求尺寸单行完整显示所需的宽和高 85.33 x 20.33 不同的视图相同的建议模式及尺寸下会返回不同的需求尺寸这一事实既是 SwiftUI 的特色也是十分容易很让人困扰的地方。...,例如: ZStack 中,ZStack 视图设置的渲染尺寸与子视图的需求尺寸一致 VStack 中,VStack 将根据其父视图提供的建议尺寸、子视图是否可扩展视图、子视图视图优先级等信息...例如在上文中,SwiftUI 所有的 Shape 设置的默认理想尺寸 10 x 10 ,Text 默认的理想尺寸单行完整显示全部内容所需的尺寸。

4.6K20

SwiftUI 中用 Text 实现图文混排

欢迎大家 Discord 频道[2] 中进行更多地交流SwiftUI 提供了强大的布局能力,不过这些布局操作都是视图之间进行的。...一个和一组 SwiftUI 中,Text 是使用频率最高的几个组件之一,几乎所有的文字显示操作均由其完成。随着 SwiftUI 版本的不断提升,Text 的功能也得到持续地增强。... SwiftUI 中,我们需要通过 Image 来显示 SF Symbols,并可使用一些修饰器来对其进行设置:Image(systemName: "ladybug") .symbolRenderingMode...用户可以控制中心或通过【设置】—【辅助功能】—【显示与文字大小】—【更大字体】来更改单个或全部应用程序的文字显示大小。...image-20220814173320321 SwiftUI 中,除非进行了特别的设置,否则所有字体的尺寸都会跟随动态类型的变化而变化。

4.2K30

Text 中实现基于关键字的搜索和定位

image-20220822084740855切换搜索结果时可自动定位到结果所在的位置点击非当前高亮关键字,会自动将其设置当前高亮关键字并滚动至视图中心位置scrollTo_keyword2_2022...)用以比对视图类型的构造参数是否发生变化,但仍然只会渲染屏幕上显示部分的 Row 视图。...请阅读 优化 SwiftUI List 中显示大数据集的响应效率[6] 以及 避免 SwiftUI 视图的重复计算[7] 两篇文章,了解更多有关性能优化方面的内容通过 currentPostion 获取需要滚动到的...List 中,每个视图进入显示窗口时都会调用它的 onAppear,每个视图退出显示窗口时都会调用它的 onDisapper。.../posts/swiftUILifeCycle/[10] SwiftUI 视图中打开 URL 的若干方法: https://www.fatbobman.com/posts/open_url_in_swiftUI

4.2K30

SwiftUI 布局:如何自定义 AlignmentGuides

SwiftUI 我们提供了视图不同边缘的对齐指南(.leading、trailing、top等)以及.center和两个基线选项来帮助文本对齐。...例如,下面的布局左侧显示我的 Twitter 帐户名和我的个人资料图片,右侧显示 “Full name:” 加上 “Wei Xian” 的大号字体: struct ContentView: View...无论您选择的是枚举还是结构体,其用法都保持不变:将其设置堆栈的对齐方式,然后使用alignmentGuide()在要对齐的任何视图上激活它。...例如,我们可以将 Twitter 代码更新use.midAccountAndName,然后告诉帐户和名称使用其中心位置作为指南。...我建议您尝试我们的示例前后添加更多的文本视图SwiftUI 将重新定位所有内容,以确保我们对齐的两个视图保持不变。

98010

SwiftUI Overlay Container 2 —— 可定制、高效、便捷的视图管理器

SwiftUI 中,描述视图已经变得十分的容易,因此我们完全可以将上述场景中的显示逻辑提炼出来,创建出一个可以覆盖更多使用场景的库,帮助开发者组织视图显示风格和交互逻辑。...所有的 SwiftUI 视图都可以容器内显示。...tapToDismiss 在为视图设置了 backgroundStyle 的情况下,是否允许通过点击背景来撤销视图。 详情参看项目演示代码 backgroundStyle 容器视图设置背景。...使用者通过调用容器管理器的特定方法,让指定的容器执行显示视图、撤销视图等工作。 容器管理器的环境值 SwiftUI 中,视图代码通过环境值调用容器管理器。...指定的容器中显示视图,返回值视图的 ID dismiss(view id: UUID, in container: String, animated flag: Bool) 指定的容器中,撤销指定

2.1K20

SwiftUI 中创建一个环形 Slider

SwiftUI 中,它通常呈现为直线上的拇指选择器。有时将这种类型的选择器呈现为一个圆圈,拇指绕着圆周移动可能会更好。本文介绍如何在 SwiftUI 中定义一个环形的 Slider。...将滑块的范围设置0.0到1.0,并硬编码一个直径和一个的当前位置进度 - 0.33。...当前值显示环形 Slider 的中心。...不同的坐标值设置滑块位置 圆形滑块上有两个表示进度的值,用于显示进度弧度的progress值和用于显示滑块光标的rotationAngle。...可以设置滑块视图的大小,并且滑块按预期工作。可以向控件添加更多参数以设置颜色或圆环内显示的值的格式。 GitHub 上提供了 Circular Slider 的代码。

3.5K30

干货 | 关于SwiftUI,看这一篇就够了

作者简介 梁启健,携程金融支付中心开发工程师,主要负责支付iOS端的开发与优化工作,喜欢研究大前端和跨平台技术。...@State内部是Get的时候建立数据源与视图的关系,并且返回当前的数据引用,使视图能够获取,Set方法中会监听数据发生变化、会通知SwiftUI重新获取视图body,再通过Function Builders...因为, SwiftUI中这些属性的设置在内部都会用一个View来承载,然后布局的时候就会按照上面示例的布局流程,一层层View的计算布局下来,这样做的优点是:方便底层设计渲染函数时更容易做到monomorphic...同时SwiftUI中也是支持frame设定,但也不会像UIKit中那样作用于当前元素,在内部也是形成一个虚拟的View来承载frame设定,布局过程中进行frame计算最终显示出想要的结果。...总之在SwiftUI中给一个View设置属性,已经不是当前元素提供约束,而是用一系列容器来包含当前元素,后续布局计算做准备。

5.7K10

SwiftUI 与 Core Data —— 安全地响应数据

当开发者模型编辑器中属性设置了默认值( 取消可选 ), Xcode 自动生成的托管对象类定义代码中仍会将不少类型声明为可选值类型。通过手动修改类型( 将 String?...也就是说,如果一个用于显示托管对象实例数据的视图被销毁了,那么假如没有其他的视图或代码引用视图显示的托管对象实例,托管上下文将从内存中将这些数据占用的内存释放掉。...属性设置 nil ,取消其与托管上下文之间的绑定。...,同时用于视图显示的数据最好也只视图之内进行获取。...如何将具体的托管对象类型以及 Core Data 操作从视图、Features 中解耦出来。希望本文能够对你有所帮助。

3.2K20

优化 SwiftUI List 中显示大数据集的响应效率

本文将通过一个优化列表视图的案例,展现在 SwiftUI 中查找问题、解决问题的思路,其中也会对 SwiftUI 视图的显式标识、@FetchRequest 的动态设置、List 的运作机制等内容有所涉及... SwiftUI 视图的生命周期研究[3] 一文中,我对 List 如何对子视图显示进行优化做了一定的介绍。... SwiftUI视图设置显式标识目前有两种方式: ForEach 的构造方法中指定 由于 ForEach 中的视图数量是动态的且是在运行时生成的,因此需要在 ForEach 的构造方法中指定可用来标识子视图的...通过它,开发者可以使用任何符合 Hashable 协议的值视图设置显式标识。ScrollViewProxy 的 scrollTo 方法就是通过该值来找到对应的视图。...解决方案一 从 iOS 15 开始,SwiftUI List 添加了更多的定制选项,尤其是解除了对列表行分割线设置的屏蔽且添加了官方的实现。

9K20

SwiftUI 布局 —— 对齐

WWDC 2022 中,苹果 SwiftUI 增添了 Layout 协议,让我们有了更多的机会了解和验证 SwiftUI 的布局原理。...alignmentGuide 修饰器 SwiftUI 中,开发者可以使用 alignmentGuide 修饰器来修改视图某个对齐指南的值( 对齐指南设定显式值,有关显式值见下文)。...默认值 视图中的每个对齐指南都有默认值( 通过在对齐指南定义中的 defaultValue 方法获取 )。不为对齐指南设置显式值( 显式值 nil )的情况下,对齐指南将返回默认值。...符合 Layout 协议的自定义布局设置显式对齐指南 SwiftUI 4.0 新增的 Layout 协议,让开发者拥有了自定义布局容器的能力。...总之, VStack、HStack、ZStack 这类可包含多个子视图的官方布局容器设置 alignment 的含义就只有一种 —— 特定维度上,将所有的子视图按照给定的对齐指南进行对齐摆放。

6.3K20

SwiftUI 4.0 的全新导航系统

SwiftUI 4.0( iOS 16+ 、macOS 13+ )对导航系统作出了重大改变,提供了以视图堆栈管理对象的新 API ,让开发者可以轻松实现编程式导航。本文将对新的导航系统作以介绍。...最大的区别是,SwiftUI 4.0 我们提供了 NavigationSplitView 中通过 List 快速绑定数据的能力。...NavigationSplitView 构造方法中提供了 columnVisibility 参数 ( NavigationSplitViewVisibility 类型 ),通过设置该参数,开发者拥有了对导航栏显示状态的控制能力...,例如, macOS 上,detalOnly 不会起作用 如果想在 SwiftUI 4.0 之前的版本上使用类似的功能,可以参考我 用 NavigationViewKit 增强 SwiftUI 的导航视图...browser iPad 下,当前视图的 Title 将显示左侧 image-20220612190914949 editor 不显示返回按钮旁边的上页视图 Title image-20220612191040190

10.2K62

SheetKit——SwiftUI模态视图扩展库

主要因为SwiftUI中重要的视图展示模式:NavigationView、Sheet等都没有迅捷、简便的重置能力。很难通过一两句代码将应用程序立即设置成我们想要的视图状态。...因此,在此种情况下,通常我们会将所有的模态视图集中管理起来,统一调用。请参阅我之前的文章——SwiftUI中,根据需求弹出不同的Sheet[3]。...•新的半高模态视图WWDC 2021中,苹果大家带来了期待已久的半高模态视图。或许推出的比较仓促,这种很受欢迎的交互方式并没有提供SwiftUI版本,仅支持UIKit。...attempToDismiss) { _ in print("try to dismiss sheet") } }} dismissSheet clearBackground 将模态视图的背景设置透明...SwiftUI3.0中,已经可以使用原生API生成各种毛玻璃效果了。但只有将模态视图的背景设置透明,毛玻璃效果才能显现出来。

2.9K20

SwiftUI 布局协议 - Part2

前言 Part 1 我们探索了布局协议的基础知识,理解布局是如何工作的打下了坚实的基础。现在,是时候深入研究那些更少提及的功能了,以及如何使用它们来我们带来便利。...当我们改变角度时,SwiftUI 会计算好每个视图最初和最终的位置,然后动画期间内修改它们的位置,从A点到B点成一条直线。...布局的 placeSubview 方法中,我们设置每个子视图的角度: struct WheelLayout: Layout { // ......视图的缩放和旋转要再一次使用双向自定义值实现。 在这个例子中容器中一共有44个视图,所以我们的新容器将会分别以12,12,12和8一圈。 注意本案例中如何使用缓存与子视图通信。...] = [.minimum, .ideal, .maximum]) -> some View 你可以在任何视图使用它,一个覆盖层将会浮动视图的头部角落,显示一组给定的建议尺寸。

2.7K30
领券