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

GeometryReader :好东西还是坏东西?

这并非因为存在事实上错误,而是这种表述可能会引起用户误解。实际上,"GeometryReader" 这个名字更符合其设计目标:一个几何信息读取器。...这种非常规布局逻辑是我不推荐将其直接用作布局容器原因之一。 GeometryReader 不支持对齐指南调整,因此上面的描述使用了原点。...在这个演示中,Image 正好满足了之前提出充满空间且原点对齐要求,因此直接使用 GeometryReader 作为布局容器是完全没有问题。...然而,这并不意味着在使用 GeometryReader 没有需要注意事项。...用 SwiftUI 方式进行布局 由于对 GeometryReader 负面看法,一些开发者会尝试寻找其他方式以避免使用它。

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

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

另外,由于 Color、Rectangle 会在两个维度进行填充( Spacer 会根据容器选择填充维度 ),因此,使用它们作为填充物,将会自动使用全部可用空间( 包括高度 ),无需通过 .frame...Color 宽度因此会出现两种可能错误状态:当文本较长,Text 会超过 Color 宽度由于合成视图具备可变尺寸特性,VStack、HStack 在为其添加 spacing 将可能出现异常...请阅读 SwiftUI 布局 —— 对齐[5] ,了解更多有关 ZStack、overlay、background 对齐机制Geometry虽然有些大材小用,但当我们需要获取更多有关视图信息GeometryReader...提供 300 x 60 建议尺寸GeometryReader视图,默认基于 topLeading 对齐( 类似 overlay(alignment:.topLeading) 效果 )使用 postion...不过除非矩形尺寸明确,否则里外都需要使用 GeometryReader ,实现将过于烦琐。总结本文选取了一些有代表性解决方法,随着 SwiftUI 功能不断增强,会有越来越多手段可供使用

6.6K40

SwiftUI水平条形图

SwiftUI水平条形图 水平条形图以矩形条形式呈现数据类别,其宽度与它们所代表数值成正比。本文展示了如何在垂直条形图基础上创建一个水平柱状图。 水平条形图不是简单垂直条形图旋转。...Bar Chart with multiple data sets in SwiftUI SwiftUI水平条形图 将条形图转换为水平 水平条形图不仅仅是在垂直条形图上配置,有一些元素是可以重复使用...对于垂直条形图组件和水平条形图组件来说,重复使用一些结构和SwiftUI视图并不简单。标题和关键区域可以原样重用。创建BarChartView副本,并将其名称改为BarChartHView。...水平和垂直条形图 一个iPad模拟器被用来比较垂直和水平条形图使用,以显示2018年五岁以下儿童死亡率最高国家。...在创建垂直条形图学到技术可以重复使用,但最好将水平条形图视为与垂直条形图不同图表。当我们深入到轴等组件,可以看到两个图表中轴线都是一样,但是它们标签和定位在x和y之间是换位

4.7K20

SwiftUI 方式进行布局

在初始状态( show == false ),视图一( 红色视图 )底部与屏幕底部对齐,当 show == true ,视图二( 绿色视图 )底部与屏幕底部对齐。...padding-offset 二、AlignmentGuide 在 SwiftUI 中,开发者可以使用 alignmentGuide 修饰器来修改视图某个对齐指南值( 设置显式值 )。...在上面的代码中,由于两个视图使用了同样动画曲线设定,因此,在移动并不会出现分离情况。...视图二同理 六、再战 AlignmentGuide 在上面使用 AlignmentGuide 例子中,我们通过 GeometryReader 获取了视图二高度信息,并通过设置显式对齐指南来完成了移动...尽管当前需求仅有两个视图,但我们仍然可以从中提炼出场景特性:在垂直排列前提下,在特定状态,指定视图底部与容器视图底部对齐

3.2K00

SwiftUI 方式进行布局

在初始状态( show == false ),视图一( 红色视图 )底部与屏幕底部对齐,当 show == true ,视图二( 绿色视图 )底部与屏幕底部对齐。...图片 二、AlignmentGuide 在 SwiftUI 中,开发者可以使用 alignmentGuide 修饰器来修改视图某个对齐指南值( 设置显式值 )。...在上面的代码中,由于两个视图使用了同样动画曲线设定,因此,在移动并不会出现分离情况。...视图二同理 六、再战 AlignmentGuide 在上面使用 AlignmentGuide 例子中,我们通过 GeometryReader 获取了视图二高度信息,并通过设置显式对齐指南来完成了移动...尽管当前需求仅有两个视图,但我们仍然可以从中提炼出场景特性:在垂直排列前提下,在特定状态,指定视图底部与容器视图底部对齐

4.7K80

深入了解 SwiftUI 5 中 ScrollView 新功能

可采用 优化在 SwiftUI List 中显示大数据集响应效率[5] 一文中介绍方式来解决。 scrollPostion(id:) 使用此修饰符可以让滚动视图滚动到特定位置。...仅适用于 ScrollView 当 ForEach 中数据源遵循 Identifiable 协议,无需显式使用 id 修饰符设置标识 与 scrollTargetLayout 配合使用,可以获取当前滚动位置...(视图标识) 不支持锚点设定,固定锚点为子视图 center 正如 优化在 SwiftUI List 中显示大数据集响应效率[6] 一文所提到,当数据集很大,也会出现性能问题。...滚动停止,容器顶端将与子视图顶部对齐(在垂直模式下)。开发者可以通过控制 scrollTargetLayout 启用与否来开关 viewAligned 行为。...同时,通过 ViewAlignedScrollTargetBehavior ,开发者还可以基于系统提供目标覆盖滚动视图滚动位置( 尚未仔细研究实现细节 )。

70520

掌握 SwiftUI Safe Area

SwiftUI 中,开发者通常只有在需要获取 StatusBar + NavBar 高度或 HomeIndeicator + TabBar 高度才会使用到 safeAreaInsets 。...使用 GeometryReader 获取 GeometryProxy 提供了 safeAreaInsets 属性,开发者可以通过 GeometryReader 获取视图 safeAreaInsets。...从 iOS 14 开始,SwiftUI 计算视图安全区域,将软键盘在屏幕上覆盖区域(iPadOS 下,将软键盘缩小后键盘覆盖区域将被忽略)也一并进行考虑。...因此,无需使用任何额外代码,视图便自动获得了键盘避让能力。但有时,并非所有的视图都需要将软键盘覆盖区域从安全区域中去除,因此需要正确地设置 SafeAreaRegions 。...safeAreaInsetList2 遗憾是,在 iOS 15 之前,SwiftUI 并没有提供调整视图安全区手段,如果我们想通过 SwiftUI 手段创建一个自定义 Tabbar ,列表中最后内容将被

7.5K31

如何在 SwiftUI 中创建条形图

前言 条形图以矩形条形式呈现数据类别,其宽度和高度与它们表示值成比例。本文将展示如何创建一个垂直条形图,其中矩形高度将代表每个类别的值。...系列文章 如何在 SwiftUI 中创建条形图 SwiftUI水平条形图 在 iOS 16 中用 SwiftUI Charts 创建一个折线图 在 iOS16 中用 SwiftUI 图表定制一个线图...在 Swift 图表中使用 Foudation 库中测量类型 开始图表布局 SwiftUI 对探索不同布局和预览实时视图结果是很友好。...SwiftUI 是一个很好平台,用于创建视图和快速重构独立子视图。在 SwiftUI 中构建条形图需要做一些工作,随着使用数据来试用条形图,可以确定更多定制化。...使用 GeometryReader 可以创建适应更多可用环境条形图。在这篇文章中,我们创建了一个简单条形图,有数值,下面有标签,还有图表标题,下一步就是分离出 x 轴和 y 轴。 - EOF -

5.1K10

掌握 ViewThatFits

在 iOS 16 中,SwiftUI 增加了一个新自适应布局容器 ViewThatFits。正如其名称所示,它作用是在给定多个视图中找出最合适视图并使用。...唯一有些奇怪是 VStack: VStack { Text("GeometryReader has been present since the birth of SwiftUI, playing...SwiftUI 提供了两个版本 fixedSize ,我们当前使用版本要求视图在水平和垂直两个轴向上都使用理想尺寸,而另一个版本允许我们对单个轴向进行限定。...当 Text1 在垂直轴上被单独限定为理想尺寸,它高度超过了 ViewThatFits 可提供高度 100(蓝色边框高度大于红色边框)。...但是,与任何强大工具一样,能否发挥期作用来自于深入理解其使用方式和限制。 在本文中,我们对 SwiftUI ViewThatFits 容器进行了深入探索。

16710

SwiftUI 实现 3D Scroll 效果

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

1.5K20

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

NavigationView + NavigationLink 界面跳转,在苹果给 SwiftUI 使用例子中就是这样写,当然我们在正常使用中这样写也没啥问题,那我们界面跳转问题是什么呢?...通过它我们可以避免在初始 View 创建 ObservableObject, 而是从环境中获取 ObservableObject,像 @EnvironmentObject,@ObservedObject...GeometryReader 主要作用就是能够获取到父View建议尺寸,这就是它主要作用,要没有它我们面临可能就是无休止传值了,SwiftUI 既然是声明式UI,按我理解你就没有办法去获取某一个视图父视图之类...这个GeometryReader在前面第一期时候我说过这个属性。...之GeometryReader 理解SwiftUI关键字 State Binding ObservesOgiect EnvironmentObje SwiftUI 自定义实现旋转木马轮播效果

11.8K20

SwiftUI 布局 —— 尺寸( 上 )

淡化尺寸概念初衷或许是出于以下两点: 引导开发者转型到声明式编程逻辑,转变使用精准尺寸习惯 掩盖 SwiftUI 中复杂尺寸概念,减少初学者困扰 但无论如何淡化或掩盖,当涉及更加高级、复杂、精准布局...这类视图本身并不会参与布局,SwiftUI 布局系统会在布局自动将它们忽略,让其子视图与具备布局能力祖先视图直接联系起来。...即使你对 Layout 协议不了解或短时间无法使用 SwiftUI 4.0 ,并不会影响你对下文阅读和理解。...、HStack、VStack 等) 需求尺寸为容器内子视图按指定对齐指南对齐摆放后( 已处理动态尺寸视图 )总尺寸,详情请参阅 SwiftUI 布局 —— 对齐[4] 其他控件例如 TextField...GeometryReader 将建议尺寸作为需求尺寸直接返回( 充满全部可用区域 ) 接下来 在上篇中,我们对 SwiftUI各种尺寸概念做了介绍,在下篇中我们将通过创建 frame、fixedSize

4.7K20

SwiftUI 布局协议 - Part2

Part 1 - 基础: 什么是布局协议 视图层次结构族动态 我们第一个布局实现 容器对齐 自定义值:LayoutValueKey 默认间距 布局属性和 Spacer() 布局缓存 高明伪装者 使用...当我们改变角度SwiftUI 会计算好每个视图最初和最终位置,然后在动画期间内修改它们位置,从A点到B点成一条直线。...过去我们在使用 GeometryReader 获取视图尺寸并传递值到父视图时候遇到过这个问题,然后父视图使用该信息去改变视图,即使用 GeometryReader 去再一次改变,然后我们就陷入了布局循环...我们不需要编写垂直或者水平间距逻辑代码,因为 SwiftUI 已经有这样布局了:HStackLayout 和 VStackLayout。 只是有点小问题,很轻易就可以修复。...] = [.minimum, .ideal, .maximum]) -> some View 你可以在任何视图使用它,一个覆盖层将会浮动在视图头部角落,显示一组给定建议尺寸。

2.7K30

SwiftUI 官方画图实例详细解析

前言 ---- 在前面几篇关于SwiftUI文章中,我们用一个具体基本项目Demo来学习了下SwiftUI,里面包含了常见一些控件使用以及数据处理和地图等等,有兴趣小伙伴可以去翻翻以前文章...最后出来UI效果就是上面这个样子,这个看过SwiftUI官方文档朋友一定见过这张图,但不知道里面的代码具体每一行或者思路是不是都读懂了,下面我们就认真的分析一下它实现思路和具体代码实际作用。...,向上对齐 GeometryReader { geometry in Path{path in...接着我们在看看箭头是怎么画出来,具体代码中是把它分成了上面两部分来画,然后通过控制各个点连接画出了图案,这次使用还是Path方法,具体是下面这个: /// Adds a sequence of...ZStack ,前面的文章中我们有介绍和使用过 HStack 和 VStack,这次在这里就用到了 VStack,他们之间没有啥特备大区别,理解视图与视图之间层级和位置关系就没问题。

98710

SwiftUI 中布局工作原理

在此过程中,您还将学习如何创建更高级布局对齐使用GeometryReader构建特殊效果,以及更多——我知道您会热衷于在自己应用程序中部署一些真正强大功能。...您需要在资源目录中提供一个图像,以便遵循有关自定义对齐指南章节,但它可以是任何您想要——它实际上只是一个占位符。 2....在幕后,SwiftUI 执行第四步:尽管它将位置和大小存储为浮点数,但在渲染SwiftUI 会将所有像素舍入到最接近值,这样我们图形仍然清晰。...background(Color.red)),文本视图成为其背景子视图。当涉及到视图及其修改器SwiftUI有效地从下到上工作。...当我们在background()中使用,简化布局对话是这样工作: 背景:嘿,文本,你可以有整个屏幕,你想要多少? 文本:我需要X乘Y点;我不需要其余。 背景:好

3.7K20
领券