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

掌握 SwiftUI Safe Area

掌握 SwiftUI Safe Area 访问我博客 www.fatbobman.com[1] 可以获得更好阅读体验 Safe Area(安全区域)是指不与导航栏、标签栏、工具栏或其他视图控制器提供视图重叠内容空间...本文将探讨如何SwiftUI 获取 SafeAreaInsets、将视图绘制到安全区域之外、修改视图安全区域等内容。...从 iOS 14 开始,SwiftUI 计算视图安全区域时,将软键盘在屏幕上覆盖区域(iPadOS 下,将软键盘缩小后键盘覆盖区域将被忽略)也一并进行考虑。...首先,背景并没有充满全部屏幕,其次在软键盘弹出时,我们并不希望背景因为安全区域变化发生改变。...,用 spacing 在想要显示内容和安全区域添加内容之间添加额外空间

7.5K31

Ask Apple 2022 与 SwiftUI 有关问答(下)

处理非常小或非常大可用空间边缘情况有多重要?...Swiftcord[12] 代码展示了如何SwiftUI 下实现倒置列表。阅读 优化在 SwiftUI List 显示大数据集响应效率[13] 一文,了解苹果工程师推荐方法。...将背景扩展到安全区域Q:如果我有一个自定义容器类型,可以接受一个顶部和底部视图,是否有办法让 API 调用者将所提供视图背景扩展到安全区域内,同时将内容( 如文本或按钮 )保留在安全区域内?...然后让顶部/底部视图忽略安全区域。我不确定这是否能满足你用例,但值得一试。在 background 修饰器,可以通过 ignoresSafeAreaEdges 参数设置是否忽略安全区域。...因为这些使用并不有害,我们不希望开发者因为使用了新编译器版本处理一堆警告。

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

SwiftUI 内容边距

前言SwiftUI 引入了一组视图修饰符,使我们能够有效地管理视图中安全区域。在许多情况下,安全区域是你希望放置内容地方。...今天,我们将了解 SwiftUI 引入新内容边距概念以及它与安全区域区别。创建示例让我们从一个简单示例开始,演示带有一百个项目的列表。...从字面上看,它是另一个安全区域,适应屏幕大小,但仅适用于文本内容。不幸是,我们在 SwiftUI 无法访问 readableContentGuide。...你可以在 Playground 运行此代码以查看结果。总结本文介绍了 SwiftUI 内容边距管理,通过对比安全区域概念,解释了内容边距重要性。...文章从创建示例开始,展示了在列表视图中如何处理内容边距问题。

1600

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

SwiftUI ,有很多手段可以达成此目的。本文将介绍其中一些方法,并对每种方法背后实现原理、适用场景以及注意事项做以说明。...background 添加符合 ShapeStyle 协议元素时,可以通过 ignoresSafeAreaEdges 参数设置是否忽略安全区域,默认值为 .all ( 忽略任何安全区域 )。...因此,当我们将合成后 hello world 视图放置在 VStack 顶部时( 通过 Spacer ),矩形 background 会连同顶部安全区域一并渲染。...解决方法是:.background(.blue, ignoresSafeAreaEdges: []) ,排除掉不希望忽略安全区域。...万变不离其宗,掌握了 SwiftUI 布局原理,无论需求如何变化都可轻松应对。

6.6K40

SwiftUI 布局 —— 尺寸( 上 )

),我们简述一下 SwiftUI 布局过程( 当前设备为 iPhone 13 Pro ): SwiftUI 布局系统为 ZStack 提供一个建议尺寸( 390 x 763 该尺寸为设备屏幕尺寸去掉安全区域大小...在 SwiftUI ,只有符合 View 协议 component 才能被 ViewBuilder[3] 所处理。因此任何一种布局容器,最终都会被包装并以 View 形式出现在代码。...该自定义布局容器又会在 sizeThatFits 方法通过调用其子视图代理( Subviews,子视图在 Layout 协议表现方式 ) sizeThatFits 方法为子视图代理提供建议尺寸...,父视图会根据需求选择合适建议模式提供给子视图。...在 SwiftUI ,通过设置或调整建议模式进行二次布局场景很多,比较常用有:frame、fixedSize 等。

4.6K20

Swift 周报 第四十一期

12 改进对闭包 actor 隔离控制 16 通过孤立值区域解除对非 @Sendable 值限制 15 这些变化共同填补了严格并发检查剩余主要漏洞,并通过引入更多 @Sendable 推断和启用安全方式在隔离边界传递非...直到今天,缺乏 @unknown default 情况仍然是一个警告不是错误;忽略该警告意味着如果遇到未来枚举案例,则会发生运行时陷阱。...这有点类似于我们如何在结果构建器创建本地常量,这些常量不会立即被消耗。 这个想法将扩展 if、guard 和 while 条件列表。...没有适当崩溃日志,这可能会让你非常沮丧,你知道你程序有一个 bug ,但你不知道问题出在哪里,也不知道如何复现。...掌握 SwiftUI ContentUnavailableView [10] 摘要: 这篇博客介绍了如何SwiftUI 掌握使用 ContentUnavailableView 类型。

20840

SwiftUI + Core Data App 内存占用优化之旅

当子视图进入惰性容器可视区域时,SwiftUI 会调用它 onAppear 闭包,子视图退出可视区域时,会调用 onDisappear 闭包。...从当今移动开发角度来说,行缓存好像存在意义不大,但考虑到 Core Data 前身主要用来处理金融类数据业务,在此种场景,行缓存可以带来相当可观收益。...不过通过实验中分析,这些数据肯定是被缓存,且在被加载后,并不会因为返回惰值自动从内存清除 因此,即使我们将托管对象返回成惰值状态,也仅能节省极少内存占用( 在本例几乎可以忽略不计 )。...是否有可能将上下文以及行缓存数据所占空间一并优化掉? 为了减少内存占用,Core Data 对于不需要数据空间采用积极释放策略。...即使我们在 onDisappear 中将该变量设置为 nil,但 SwiftUI 并没有释放之前它所占用空间

2.4K40

SwiftUI + Core Data App 内存占用优化之旅

当子视图进入惰性容器可视区域时,SwiftUI 会调用它 onAppear 闭包,子视图退出可视区域时,会调用 onDisappear 闭包。...从当今移动开发角度来说,行缓存好像存在意义不大,但考虑到 Core Data 前身主要用来处理金融类数据业务,在此种场景,行缓存可以带来相当可观收益。...不过通过实验中分析,这些数据肯定是被缓存,且在被加载后,并不会因为返回惰值自动从内存清除 因此,即使我们将托管对象返回成惰值状态,也仅能节省极少内存占用( 在本例几乎可以忽略不计 )。...是否有可能将上下文以及行缓存数据所占空间一并优化掉? 为了减少内存占用,Core Data 对于不需要数据空间采用积极释放策略。...即使我们在 onDisappear 中将该变量设置为 nil,但 SwiftUI 并没有释放之前它所占用空间

1.2K10

SwiftUI中使用UIKit视图

SwiftUI,开发者为视图创建描述,并不实际渲染它们。...当SwiftUI递归到这些原始类型时,将结束递归,它将不再关心原始类型body,让原始类型自行对其管理区域进行处理SwiftUI框架通过将body定义为Never来标记该View为原始类型。...•处理UIKit视图中复杂逻辑在UIKit开发,通常会将业务逻辑放置在UIViewControllerSwiftUI没有Controller这个概念,视图仅是状态呈现。...(自定义协调器)、transaction(如何处理状态更新,动画模式)以及environment(当前视图环境值集合)。...不过有以下几点需要注意: •如何改变View内值(View是结构)•如何处理返回类型(保证调用链继续有效)•如何利用SwiftUI框架现有的数据并与之交互逻辑 为了更全面的演示,下面的例子,采用了不同处理方式

8.1K20

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

许多SwiftUI视图自动处理交互——你所要做就是提供在交互发生时运行代码。...你也可以在视图中添加SwiftUI手势识别器来处理点击、长按、拖动、旋转和缩放手势。...人们可以使用连接鼠标、触控板或键盘与项目交互、触发菜单命令和执行手势。 构建并运行你app页面链接 在模拟器构建并运行你应用,看看看起来如何。...在为visionOS构建应用程序时,请考虑如何为应用程序界面添加深度。该系统提供了几种显示3D内容方法,包括在现有窗口中,在卷以及在沉浸式空间中。选择最适合你应用和你提供内容选项。...在人周围页面链接显示3D内容 当你需要更多地控制应用内容位置时,可以将内容添加到ImmersiveSpace。沉浸式空间为您内容提供了一个无限区域,您可以控制空间内内容大小和位置。

70640

SwiftUI 布局工作原理

SwiftUI 布局简介 ---- 在这个技术项目中,我们将探讨 SwiftUI 如何处理布局。...在此过程,您还将学习如何创建更高级布局对齐,使用GeometryReader构建特殊效果,以及更多——我知道您会热衷于在自己应用程序中部署一些真正强大功能。...子视图根据自己信息,它会选择自己尺寸,父视图必须尊重这个选择。 然后父视图在其坐标空间中定位子视图。...这意味着当我们应用修饰符时,进入层次结构实际视图是修改后视图,不是原始视图。 在我们简单background()示例,这意味着ContentView顶层视图是背景,内部是文本。...希望现在您可以理解为什么:background() 是布局无关,所以通过询问子对象需要多少空间并使用相同值来确定需要多少空间

3.7K20

SwiftUI 视图中打开 URL 若干方法

访问我博客 www.fatbobman.com[1] 可以获得更好阅读体验 本文将介绍在 SwiftUI 视图中打开 URL 若干种方式,其他内容还包括如何自动识别文本内容并为其转换为可点击链接...,以及如何自定义打开 URL 前后行为等。...)打开指定 URL 将文本部分内容变成可点击区域,点击后打开指定 URL 遗憾是,1.0 时代 SwiftUI 还相当稚嫩,没有提供任何原生方法来应对上述两种场景。...3.0 时代,随着 Text 功能增强和 AttributedString 出现,SwiftUI 终于补上了另一个短板 —— 将文本部分内容变成可点击区域,点击后打开指定 URL。...遗憾是,即使我们已经为 AttributedString 设置了前景色,但当某段文字 link 属性非 nil 时,Text 将自动忽略前景色和下划线设定,使用系统默认 link 渲染设定来显示

7.6K31

onAppear 调用时机

onAppear( task )是 SwiftUI 开发者经常使用一个修饰符,但一直没有权威文档明确闭包被调用时机。...图片请忽略例子写法是否合理和值得推荐,仅考虑为什么在第一段代码,出现了数组越界情况;以及第二段代码可以正确运行。...创建实例、求值、布局、渲染在 SwiftUI ,一个视图在生命周期中通常会经历四个阶段:创建实例视图树,处于可显示分支视图基本上都会经历一个阶段。...在一个视图生存期中,SwiftUI 可能会多次创建视图实例。由于惰性视图优化机制,对于尚未处于可见区域子视图,SwiftUI 不会创建其实例求值一个被显示视图至少会经历一次过程。...,并通过生命周期回调方法来确定当前状态。

2K20

onAppear 调用时机

onAppear( task )是 SwiftUI 开发者经常使用一个修饰符,但一直没有权威文档明确闭包被调用时机。...image-20230328163706115 请忽略例子写法是否合理和值得推荐,仅考虑为什么在第一段代码,出现了数组越界情况;以及第二段代码可以正确运行。...创建实例、求值、布局、渲染 在 SwiftUI ,一个视图在生命周期中通常会经历四个阶段: 创建实例 视图树,处于可显示分支视图基本上都会经历一个阶段。...在一个视图生存期中,SwiftUI 可能会多次创建视图实例。 由于惰性视图优化机制,对于尚未处于可见区域子视图,SwiftUI 不会创建其实例 求值 一个被显示视图至少会经历一次过程。...,并通过生命周期回调方法来确定当前状态。

1.1K10

SwiftUI TextField进阶——格式与校验

SwiftUI早期,这确实是十分有效手段。不过随着SwiftUI逐渐成熟,苹果为SwiftUIAPI提供了大量独有功能。如果仅为了某些需求放弃使用官方SwiftUI方案有些得不偿失。...如何在TextField实现格式化显示 现有格式化方法 在SwiftUI 3.0,TextField新增了使用新老两种Formatter构造方法。...如何在TextField屏蔽无效字符 现有屏蔽字符方法 在SwiftUI,可以通过设置仅使用特定键盘类型来实现一定程度上录入限制。...如何在TextField检查内容是否符合指定条件 相较上述两个目标,在SwiftUI检查TextField内容是否符合指定条件是相当方便。...不利于判断用户是否录入新信息(更多信息可参阅如何SwiftUI创建一个实时响应Form[10])。方案二允许不提供初始值,支持可选值。

8.1K20

StateObject 与 ObservedObject

StateObject 是在 SwiftUI 2.0 才添加属性包装器,出现解决了在某些情况下使用 ObservedObject 视图会出现超预期问题。...( 例如依赖注入 )对该实例 body 属性求值渲染视图从 SwiftUI 角度来说,视图是对应着屏幕上某个区域一段数据,它是通过调用某个根据描述该区域声明所创建实例 body 属性计算而来...在 @StateObject 研究[4] 一文,展示了因错误使用 ObservedObject 引发灵异现象代码片段出现这种情况是因为一旦,在视图存续期中,SwiftUI 创建了新实例并使用了该实例...例如,在某些情况下,开发者需要父视图不断地生成全新可观察对象实例传递给子视图。但由于子视图中使用了 StateObject ,只会保留首次传入实例强引用,后面传入实例都将被忽略。...不在构造方法引入无关操作可以极大地减轻系统负担。对于数据准备工作,可以使用 onAppear 或 task ,在视图加载时进行。

2.4K20

GeometryReader :好东西还是坏东西?

将几何信息传递到上层视图,可能会引起不必要视图更新。向下传递信息,可以确保更新只在 GeometryReader 闭包中进行。 GeometryReader 是布局容器吗,布局逻辑是什么?...GeometryReader 将完全无视子视图提出需求尺寸,在这一点上,处理方式与 overlay 和 background 对待子视图方式一致。...在上面对 GeometryReader 布局规则描述,我们指出了 ideal size 是(10,10 )。...在这个演示,Image 正好满足了之前提出充满空间且原点对齐要求,因此直接使用 GeometryReader 作为布局容器是完全没有问题。...在处理类似需求时,我们应优先采用更符合 SwiftUI 思维方式来考虑布局方案,而非依赖某个特定几何数据进行计算。

45970

解析SwiftUI布局细节(二)循环轮播+复杂布局

这篇我们还是说我们关于SwiftUI东西,再提一下Demo代码我已经提交上Git了,目前Demo进度为一级页面基本上结束,地图点击大头针添加也刚处理完,代码有需要小伙伴可以去Git看看,项目地址...GeometryReader 主要作用就是能够获取到父View建议尺寸,这就是主要作用,要没有我们面临可能就是无休止传值了,SwiftUI 既然是声明式UI,按我理解你就没有办法去获取某一个视图父视图之类...** subscript 可以让我们获取.leading,.top等等类似这样数据 *** safeAreaInsets 可以获取安全区域Insets **** frame(...区别于我们UIKit创建方式,SwiftUI进行了简化,具体创建如下: /// SwiftUI对定时器简化,可以进去看看具体参数定义 private let timer = Timer.publish...= .zero /// 当前显示位置索引, /// 这是实际数据1就是数据没有被处理之前0位置图片 /// 所以这里默认从1开始 @State var currentIndex

11.8K20

高级 SwiftUI 动画 — Part 1:Paths

这些都是被官方文档完全忽略主题,在SwiftUI 帖子和文章也几乎没有提及。不过,它们还是为我们提供了创建一些相当不错动画工具。...动画是如何工作 在所有SwiftUI动画背后,有一个名为 Animatable 协议。我们将在后面讨论细节,但主要是,拥有一个计算属性,其类型遵守 VectorArithmetic 协议。...SwiftUI 已经为不透明度制作了动画,不需要我担心这一切。是的,这是真的,但只要 SwiftUI 知道如何将数值从原点插值到终点。对于不透明度,这是一个直接过程,SwiftUI 知道该怎么做。...请注意,我使用了一点三角学知识。这对理解这篇文章主题并不重要,但如果你想了解更多关于信息,我写了另一篇文章,阐述了基础知识。你可以在 "SwiftUI 三角公式 "阅读更多内容。...现在看起来更优雅了。不要忘记修改绘图代码,这样它就会使用sidesAsDouble 不是sides。完整代码可以在文章顶部链接 gist 文件 Example2 中找到。

3.7K20
领券