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

GeometryReader :好东西还是坏东西?

GeometryReaderSwiftUI 诞生之初就存在,它在许多场景扮演着重要角色。然而,从一开始就有开发者对其持负面态度,认为应尽量避免使用。...GeometryReader 打破了 SwiftUI 声明式编程理念,使得需要直接操作视图框架,接近命令式编程。...一些复杂布局场景,或者某些设备或系统版本,布局可能需要经过几轮协商才能获得最终稳定结果,尤其是当视图需要依赖 GeometryReader 提供几何信息来重新确定自己位置和尺寸时。...此外,由于 overlay 支持设置对齐指南,比起 GeometryReader,它可以方便地调整图片对齐位置。 另外,GeometryReader 经常用于按照一定比例分配两个视图空间。...里子和面子:不同尺寸数据 SwiftUI ,有一些 modifier 是布局之后,渲染层面对视图进行调整。

44670

掌握 SwiftUI Safe Area

UIKit ,开发者需要利用 safeAreaInsets 或 safeAreaLayoutGuide ,才能确保将视图放置界面可见部分。 SwiftUI 对上述过程进行了彻底简化。...本文将探讨如何在 SwiftUI 获取 SafeAreaInsets、将视图绘制到安全区域之外、修改视图安全区域等内容。... SwiftUI ,开发者通常只有需要获取 StatusBar + NavBar 高度或 HomeIndeicator + TabBar 高度时才会使用到 safeAreaInsets 。...从 iOS 14 开始SwiftUI 计算视图安全区域时,将软键盘在屏幕覆盖区域(iPadOS 下,将软键盘缩小后键盘覆盖区域将被忽略)也一并进行考虑。...使用 safeAreaInset 扩展安全区域 SwiftUI ,所有基于 UIScrollView 组件(ScrollView、List、Form),默认情况下都会充满整个屏幕,但仍可确保我们可以安全区域内看到所有的内容

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

SwiftUI案例:3D旋转图片播放器

SwiftUI案例:3D旋转图片播放器 效果 目标 实现多张图片3D切换查看功能 外观配置 任选 7 张任意尺寸图片按 p1 至 p7 进行命名并拖拽进 Assets.xcassets 文件(如图所示...) 创建View视图 工作区项目文件夹下创建名为 View Group 并在其中依次创建 Home.swift CarouseBodyView.swift ScrollViewOffsetModifier.swift...: 滚动偏量视图,用来设置3D滚动效果; 视图实现 主视图 Home.swift 大致定义整个屏幕视图布局与容器接口。...CarouseBodyView.swift 通过视图容器嵌套布局,实现 Home.swift 组件文本与图片具体内容。...ScrollViewOffsetModifier.swift 这类似于 css transform: rotateX() transform: rotateY() 属性,通过屏幕反馈滑动位置来控制每个图片组件

2.3K30

何在 SwiftUI 创建条形图

系列文章 如何在 SwiftUI 创建条形图 SwiftUI 水平条形图 iOS 16 中用 SwiftUI Charts 创建一个折线图 iOS16 中用 SwiftUI 图表定制一个线图... Swift 图表中使用 Foudation 库测量类型 开始图表布局 SwiftUI 对探索不同布局和预览实时视图结果是很友好。...很容易将部分内容提取到子视图中,以便每个部分都很小且易于维护。从将包含 BarChartView 以及可能其他文本或数据视图开始。...条形图上值使用叠加视图修改移到了条形图顶部。这个值是偏移,所以文本不会离条形图顶部太近。数据名称字体大小和字重也可以被设置。...SwiftUI 是一个很好平台,用于创建视图和快速重构独立视图 SwiftUI 构建条形图需要做一些工作,随着使用数据来试用条形图,可以确定更多定制化。

5.1K10

SwiftUI案例:天气

SwiftUI案例:天气 效果 目标 实现静态仿iOS天气APP程序 文件与配置 外观配置 外观配置需要从 '代码' 中下载文件并提取对应图片 需要配置 Assets.xcassets...文件 需要配置 SpriteFiles/Assets.xcassets 文件 动态图片导入 工作区项目文件夹下创建名为 SpriteFiles Group 并在其中依次导入...CustomCorner.swift WeatherDataView.swift 视图文件 创建Model模板 工作区项目文件夹下创建名为 Model Group 并在其中创建 Forecast.swift...视图与模板实现 ContentView.swift 这是应用视图总体框架布局,需要自适应屏幕尺寸 import SwiftUI struct ContentView: View { var...body: some View { //需要通过proxygeometry reader来获得屏幕合适尺寸 GeometryReader { proxy in

4.7K21

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

SwiftUI ,有很多手段可以达成此目的。本文将介绍其中一些方法,并对每种方法背后实现原理、适用场景以及注意事项做以说明。...image-20220829152914736将合成后视图放置某个可能会充满屏幕视图顶部或底部显示结果或者与你预期不符 VStack { // Hello world 视图 1....background(.red) Spacer() // 让 VStack 充满可用空间}image-20220829154641251从 SwiftUI 3.0 开始使用...因此,当我们将合成后 hello world 视图放置 VStack 顶部时( 通过 Spacer ),矩形 background 会连同顶部安全区域一并渲染。...我为本文这种通过多种方法来解决一个问题方式添加了【小题大作】标签,目前使用该便签文章还有: Core Data 查询和使用 count 若干方法[6]、 SwiftUI 视图中打开 URL

6.6K40

SwiftUI 方式进行布局

初始状态时( show == false ),视图一( 红色视图底部与屏幕底部对齐,当 show == true 时,视图二( 绿色视图底部与屏幕底部对齐。...offset 则是渲染层面进行位置调整,即使出现了位置变化,其他视图布局时,并不会将其位移考虑在其中。...我们第一个 overlay 绘制了一个与视图二尺寸一致视图( 不显示 ),并将其底边与屏幕底边对齐。...通过 matchedGeometryEffect 分别为该站位视图顶部和底部设置了两个标识符以保存信息。 让视图一、视图两个状态下分别使用对应 ID 位置,即可实现本文需求。...这意味着, ScrollView ,子视图最好明确设定尺寸( 提出明确地需求尺寸 )。因此,在上面的代码,需要通过屏幕高度和视图高度差来计算上方空白站位视图高度。

3.2K00

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

NavigationView + NavigationLink 界面跳转,苹果给 SwiftUI 使用例子中就是这样写,当然我们正常使用这样写也没啥问题,那我们界面跳转问题是什么呢?...GeometryReader 主要作用就是能够获取到父View建议尺寸,这就是它主要作用,要没有它我们面临可能就是无休止传值了,SwiftUI 既然是声明式UI,按我理解你就没有办法去获取某一个视图视图之类...有一个还得说明一下,GeometryReader 改变了它显示内容方式。 iOS 13.5 ,内容放置方式为 .center。 iOS 14.0 则为:.topLeading。...3、再提一点关于上面说滚动视图UIKit我们可以用UICollectionView搞定一切,但是SwiftUI没有这个控件,我建议采用方式是 ScrollView + HStack + VStack...= .zero /// 当前显示位置索引, /// 这是实际数据1就是数据没有被处理之前0位置图片 /// 所以这里默认从1开始 @State var currentIndex

11.8K20

SwiftUI 方式进行布局

初始状态时( show == false ),视图一( 红色视图底部与屏幕底部对齐,当 show == true 时,视图二( 绿色视图底部与屏幕底部对齐。...offset 则是渲染层面进行位置调整,即使出现了位置变化,其他视图布局时,并不会将其位移考虑在其中。...我们第一个 overlay 绘制了一个与视图二尺寸一致视图( 不显示 ),并将其底边与屏幕底边对齐。...通过 matchedGeometryEffect 分别为该站位视图顶部和底部设置了两个标识符以保存信息。 让视图一、视图两个状态下分别使用对应 ID 位置,即可实现本文需求。...这意味着, ScrollView ,子视图最好明确设定尺寸( 提出明确地需求尺寸 )。因此,在上面的代码,需要通过屏幕高度和视图高度差来计算上方空白站位视图高度。

4.7K80

SwiftUI 之 HStack 和 VStack 切换

我们例子,LoginActionsView 不再只是水平方向排列,它现在也能移动到屏幕顶部。...这样做好处不仅仅是引入 GeometeryReader 之前保留同样紧凑布局,并且会使 DynamicStack 开始时候以一种和系统组件类似的方式在所有设备和方向上构建。...使用布局协议 虽然我们最后已经用了非常棒解决方案,可以在所有支持 SwiftUI iOS 版本中使用,但也让我们来探索一下 iOS 16 引入一些新布局工具(写这篇文章时,它作为...Xcode 14 一部分仍在测试阶段) 其中一个工具是新 Layout 协议,它既能让我们创建完整自定义布局,直接集成到 SwiftUI 布局系统,同时也提供给我们一种丝滑更动画方式各种布局之间动态切换...这样做会令动画流畅,例如在切换设备方向时,我们也有可能在执行此类更改时获得小幅性能提升(因为 SwiftUI 总是在其视图层次结构为静态时尽可能表现最佳) 选择合适视图 但我们还没有结束,因为

2.8K10

SwiftUI水平条形图

SwiftUI水平条形图 水平条形图以矩形条形式呈现数据类别,其宽度与它们所代表数值成正比。本文展示了如何在垂直条形图基础上创建一个水平柱状图。 水平条形图不是简单垂直条形图旋转。...Bar Chart with multiple data sets in SwiftUI SwiftUI 水平条形图 将条形图转换为水平 水平条形图不仅仅是垂直条形图上配置,有一些元素是可以重复使用...对于垂直条形图组件和水平条形图组件来说,重复使用一些结构和SwiftUI视图并不简单。标题和关键区域可以原样重用。创建BarChartView副本,并将其名称改为BarChartHView。...它控制了图表布局,其中三个视图改为YaxisHView、ChartAreaHView和XaxisHView,它们最初只是垂直条形图中使用视图副本。...水平条形图中,显示条形图上数值并隐藏X轴可以使图表简洁。 显示和隐藏水平条形图上元素 结论 创建水平条形图SwiftUI代码与创建垂直条形图代码不同。

4.7K20

SwiftUI 布局 —— 尺寸( 上 )

Layout 协议,对应是 sizeThatFits 方法。经过该阶段协商,SwiftUI 将确定视图所在屏幕位置和尺寸。...第二阶段 —— 安置子民 该阶段,父视图将根据 SwiftUI 布局系统提供屏幕区域( 由第一阶段计算得出 )为子视图设置渲染位置和尺寸( 上方 5-6 )。... Layout 协议,对应是 placeSubviews 方法。此时,视图树上每个视图都将与屏幕具体位置联系起来。...尽管 Layout 协议主要用途是让开发者创建自定义布局容器,且 SwiftUI 仅有少数视图符合该协议,但从 SwiftUI 1.0 开始SwiftUI 视图布局机制便基本与 Layout...视图尺寸 视图渲染后屏幕上呈现尺寸,也是热门提问 —— 如何获取视图尺寸中所指尺寸。 视图中可以通过 GeometryReader 获取特定视图尺寸及位置

4.6K20

SwiftUI 实现 3D Scroll 效果

我们预览下今天要实现 3D scroll 效果。学完本教程后,你就可以在你 App 把这种 3D 效果加入任何自定义 SwiftUI 视图。下面我们来开始本教程学习。...入门 首先,创建一个新 SwiftUI 视图。为了举例说明,在这个新视图中,我会展示一个有各种颜色矩形列表,并把新视图命名为 ColorList。...这样的话,当 Rectangle 屏幕上移动时候,我们就可以获得其 frame 引用。...axis 参数是一个元组类型,它定义了使用你传入角度参数时,哪一个坐标轴要发生改变。本例,是 Y 轴。 rotation3DEffect() 方法文档可以苹果官方网站 这里 找到。...当矩形屏幕上移动时,你可以看到它们旋转。 我还修改了矩形 cornerRadius 属性,并加上了投影效果,让它更美观。

1.5K20

深入了解 SwiftUI 5 ScrollView 新功能

SwiftUI 5.0 ,苹果大幅强化了 ScrollView 功能。新增了大量新颖、完善 API。本文将对这些新功能进行介绍,希望能够让它们更多、更早帮助到有需要开发者。...它只影响滚动视图初始状态,一次性设置。通常用于实现类似初始状态从底部显示 IM 应用、从 trailing 开始显示数据等情况。通过 UnitPoint 可以同时设置两个轴向初始位置。...可采用 优化 SwiftUI List 显示大数据集响应效率[5] 一文中介绍方式来解决。 scrollPostion(id:) 使用此修饰符可以让滚动视图滚动到特定位置。...(视图标识) 不支持锚点设定,固定锚点为子视图 center 正如 优化 SwiftUI List 显示大数据集响应效率[6] 一文所提到,当数据集很大时,也会出现性能问题。...滚动停止时,容器顶端将与子视图顶部对齐(垂直模式下)。开发者可以通过控制 scrollTargetLayout 启用与否来开关 viewAligned 行为。

66920

高级 SwiftUI 动画 — Part 2:GeometryEffect

在下面的例子,我们将创建一个水平移动视图效果,但它也会在开始时倾斜,结束时取消倾斜: 倾斜效果需要在动画第一个和最后一个20%期间增加和减少。中间,倾斜效果将保持稳定。...完整代码可在本页面顶部链接gist文件 实例6 获得。 动画反馈 在下一个例子,我将向你展示一个简单技术,它将使我们视图对效果动画进展做出反应。...通过对绑定变量变化做出反应,我们将能够替换正在旋转动画过程视图。这将创造一种错觉,即视图有两个面。下面是一个例子: 落实我们效果 让我们开始创建我们效果。...你会注意到,三维旋转变换可能与你核心动画中习惯略有不同。SwiftUI,默认锚点是视图前角,而在Core Animation中心。...在这个例子,我们效果将通过一个任意路径移动一个视图。这个问题有两个主要挑战: 1.如何获取路径特定点坐标。 2.如何在通过路径移动时确定视图方向。

1.3K30

SwiftUI geometryGroup() 指南:从原理到实践

我认为,对于许多开发者来说,他们希望黄色圆形能够像红色矩形一样,通过动画方式从原始 topLeading 位置移动到放大后 topLeading 位置。...SwiftUI 将黄色圆形放置放大后红色矩形 topLeading 位置。...这是因为 SwiftUI ,每个可动画视图根据 transaction 信息自行决定自身动画行为。...视图几何信息发生变化时,不要同时视图中创建新内容 如果一定要在变化时为子视图增加新元素( 比如上面基于 GeometryReader 示例,可以将所需元素视图变化前便让其存在,通过透明度来调整其可见性...对于 iOS 16,文字变化较多且较大情况下,应尽量避免视图几何信息调整时切换文字内容。 总结 本文中,我们深入探讨了 SwiftUI geometryGroup() 重要性和实用性。

25010

SwiftUI 创建一个环形 Slider

环形Slider Slider 控件是一种允许用户从一系列值中选择一个值 UI 控件。 SwiftUI ,它通常呈现为直线上拇指选择器。...有时将这种类型选择器呈现为一个圆圈,拇指绕着圆周移动可能会更好。本文介绍如何在 SwiftUI 定义一个环形 Slider。...有关默认 Slider 更多信息,可以参阅 如何在 SwiftUI 自定义 Slider 自定义外观内容。 初始化环形轮廓 从ZStack三个圆环开始。...视图被提取到一个单独结构,该结构具有圆形滑块上进度一个绑定值。 滑块range可选参数也是可用。这需要对进度进行一些调整,以计算已设置角度以及拇指在圆形滑块上位置旋转角度。...View以测试和演示 Circular Slider 视图不同功能。

3.5K30

SwiftUI 布局协议 - Part2

当我们改变角度时,SwiftUI 会计算好每个视图最初和最终位置,然后动画期间内修改它们位置,从A点到B点成一条直线。...开始位置和结束位置是一样,因此就 SwiftUI 而言,没有动画。 如果这就是你要找东西,那就太好了,但由于我们将视图围绕一个圆圈放置,如果视图沿着那个假想圆圈移动不是更有意义吗?...过去我们使用 GeometryReader 获取视图尺寸并传递值到父视图时候遇到过这个问题,然后父视图使用该信息去改变视图,即使用 GeometryReader 去再一次改变,然后我们就陷入了布局循环...在下一个例子我们将会把前三个视图水平放置视图顶部,后三个水平放置底部。剩下视图将会在中间,垂直排列。...但是,仔细思考之后,还有一种简单方式。 相比于使用布局值去分别通知树每个节点最终位置,使用布局代码创建整个路径来简单一点。然后,我们只需要将路径返回给负责展示视图

2.7K30

SwiftUI 布局工作原理

在此过程,您还将学习如何创建更高级布局对齐,使用GeometryReader构建特殊效果,以及更多——我知道您会热衷于自己应用程序中部署一些真正强大功能。...SwiftUI 布局工作原理 ---- 所有的 SwiftUI 布局都有三个简单步骤,理解这些步骤是每次获得优秀布局关键。步骤如下: 父视图提供一个大小并询问其子视图大小。...幕后,SwiftUI 执行第四步:尽管它将位置和大小存储为浮点数,但在渲染时,SwiftUI 会将所有像素舍入到最接近值,这样我们图形仍然清晰。...这意味着当我们应用修饰符时,进入层次结构实际视图是修改后视图,而不是原始视图我们简单background()示例,这意味着ContentView顶层视图是背景,而内部是文本。...如果我们把这个放到三步布局系统,我们最终会有一个类似这样对话: SwiftUI:“嘿,ContentView,你自己拥有整个屏幕——你需要多少?

3.7K20

掌握 ViewThatFits

iOS 16 SwiftUI 增加了一个新自适应布局容器 ViewThatFits。正如其名称所示,它作用是在给定多个视图中找出最合适视图并使用。...理想尺寸( Ideal Size ) SwiftUI ,相较于建议尺寸,很多开发者对理想尺寸接触较少,理解也不太深入。...用容易理解语言来说,理想尺寸就是一个视图不给其任何尺寸限定(理想外部环境)情况下,其最理想呈现结果所占用尺寸。 对于不同种类视图,它们理想呈现处理规则是不同。... SwiftUI ,我们可以通过 frame 来修改视图在理想状态下呈现。...但是,与任何强大工具一样,能否发挥期作用来自于深入理解其使用方式和限制。 本文中,我们对 SwiftUI ViewThatFits 容器进行了深入探索。

15710
领券