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

SwiftUI:如何在不使用几何阅读器的情况下根据帧的大小计算视图的大小?

SwiftUI是一种用于构建用户界面的现代化框架,它采用声明式语法,简化了界面开发的流程。在SwiftUI中,可以使用几何阅读器(GeometryReader)来根据帧的大小计算视图的大小。但是,如果不想使用几何阅读器,也有其他方法来实现这个目标。

一种常见的方法是使用GeometryProxy对象来获取视图的大小信息。通过在视图的body属性中使用GeometryReader,并将几何代理作为参数传递给闭包,可以访问到视图的大小信息。然后,可以使用代理对象的size属性来计算视图的大小,并将其应用于视图的布局。例如:

代码语言:txt
复制
struct ContentView: View {
    var body: some View {
        GeometryReader { geometry in
            Text("Hello, SwiftUI!")
                .font(.title)
                .frame(width: geometry.size.width * 0.8, height: geometry.size.height * 0.5)
        }
    }
}

上述示例中,通过将视图的宽度设置为几何代理的宽度的80%,将视图的高度设置为几何代理的高度的50%,从而根据帧的大小计算视图的大小。

除了使用几何阅读器外,还可以使用PreferenceKey协议来跟踪视图大小的变化。PreferenceKey允许在视图层次结构中将值传递回父视图。通过在每个子视图上设置不同的键,可以收集和汇总子视图的信息,然后在父视图中使用。这样,可以在父视图中根据帧的大小计算视图的大小。

综上所述,根据帧的大小计算视图的大小在SwiftUI中可以使用几何阅读器或PreferenceKey来实现。这些方法能够提供灵活的方式来适应不同的布局需求。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云开发者平台:https://cloud.tencent.com/developer
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能计算机(NVIDIA GPU云服务器):https://cloud.tencent.com/product/gpu
  • 云数据库 MySQL 版(TencentDB for MySQL):https://cloud.tencent.com/product/cdb_for_mysql
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯链平台(BCS):https://cloud.tencent.com/product/bcs
  • 边缘计算(CDN):https://cloud.tencent.com/product/cdn
  • 私有网络(VPC):https://cloud.tencent.com/product/vpc
  • 云安全中心(AQ):https://cloud.tencent.com/product/aq
  • 移动推送(信鸽):https://cloud.tencent.com/product/tpns
  • 腾讯云盾:https://cloud.tencent.com/product/ddos-defense
  • 智能语音交互(SI):https://cloud.tencent.com/product/si
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

EasyDSS如何在更换地址情况下扩容磁盘大小以增加存储空间?

对于EasyDSS录像存储问题是大家咨询比较多内容,EasyDSS平台内有默认存储磁盘,当默认存储磁盘空间不足时就需要更改存储磁盘地址或者对磁盘进行扩容,前文中我们分享过如何将RTMP协议视频直播点播平台...EasyDSS录像文件存储在其他空闲磁盘内,本文我们讲一下如何在更换地址情况下扩容磁盘大小。...1.首先需要安装一个lvm2程序 Yum -y install lvm2 2.将磁盘进行分区格式化,并将需要扩容和被扩容两个磁盘进行格式化为物理卷 命令:pvcreate /dev/sdc1 /...dev/sdc2 3.创建完成物理卷之后需要创建卷组 命令:vgcreate vg0 /dev/sdc1 /dev/sdc2 4.创建逻辑卷 命令:lvcreate -L 逻辑卷大小(4T) -n...lv0 vg0 5.格式化逻辑卷 命令:mkfs.xfs /dev/vg0/lv0 6.此时就可以看到lv0这个扩容后磁盘了,我们将这个磁盘挂载到某一个目录就可以了(永久挂载可以写入fstab)

90740

GeometryReader :好东西还是坏东西?

一个容器视图根据其自身大小和坐标空间定义其内容。 严格来讲,我并不完全赞同上述描述。这并非因为存在事实上错误,而是这种表述可能会引起用户误解。...,我们可以将 geometryReader 作用描述为:它提供了其所应用视图大小、frame 等几何信息,是视图获取自身几何信息有效手段。...但实际上,它显示结果是完全正确,这就是正确布局结果。 因此,在这种情况下,通常我们只会使用拥有明确值维度尺寸( 建议尺寸有值 ),并以此为来计算另一维度尺寸。...GeometryReader 常用于需要限定比例场景,例如让视图占据可用空间 25% 宽度,或者像上文中根据给定高宽比来计算高度。...visualEffect 允许开发者在破坏当前布局情况下(不改变其祖先和后代)直接在闭包中使用视图 GeometryProxy,并对视图应用某些特定 modifier。

56470

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

本文将介绍 geometryGroup() 概念、用法,以及在低版本 SwiftUI 中,在不使用 geometryGroup() 情况下如何处理异常。...默认情况下SwiftUI 视图会将位置和大小变化沿视图层级向下传递,以至于只有绘制内容视图(称为叶子视图)将当前动画应用到它们框架矩形上。...然而在某些情况下,这种聚合行为可能会导致希望结果;插入一个几何组可以纠正这种情况。几何组充当父视图与其子视图之间屏障,迫使位置和大小值由父视图解析和动画化,然后再传递给每个子视图。...TopLeadingTest1 根据从父视图 frame 接收到建议尺寸变化,根据其默认布局形态(充满全部可用空间)改变了自身大小。...这是因为在 SwiftUI 中,每个可动画视图根据 transaction 中信息自行决定自身动画行为。

26710

在画图软件中,可以画出不同大小或颜色圆形、矩形等几何图形。几何图形之间有许多共同特征,它们可以是用某种颜色画出来,可以是填充或者填充

(1)使用继承机制,分别设计实现抽象类 图形类,子类类圆形类、正方形类、长方形类,要求: ①抽象类图形类中有属性包括画笔颜色(String类型)、图形是否填充(boolean类型:true表示填充,false...表示填充), 有方法获取图形面积、获取图形周长等; ②使用构造方法为其属性赋初值; ③在每个子类中都重写toString()方法,返回所有属性信息; ④根据文字描述合理设计子类其他属性和方法...(2)设计实现画板类,要求: ①画一个红色、无填充、长和宽分别为10.0与5.0长方形; ②画一个绿色、有填充、半径为3.0圆形; ③画一个黄色、无填充、边长为4.0正方形; ④分别求三个对象面积和周长...,并将每个对象所有属性信息打印到控制台。...:" +getColour() +"\t"+"有无填充:" +isFill()+ "半径为:"+getR()+"圆形面积为:"+area()+"周长为:"+perimeter() ; } }

1.8K30

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

使用 environmentObject 情况下,如何避免创建实例视图被重新计算Q:如何在避免重新计算顶层视图 body 情况下,在不同子树两个子视图之间共享状态( 例如 ObservableObject...是否有其他方法可以直接根据状态变化对视图进行动画处理而不使用 onChange 修饰器?我代码是这样。....不过,在传统 viewModel 意义上,我建议将视图( 结构本身 )作为视图模型。...这可能会导致一些不好后果,例如使视图可重用性降低,并将业务逻辑与 SwiftUI 视图生命周期挂钩,这将使处理业务逻辑变得更加困难。简而言之,我们建议使用视图作为视图模型。...在有些情况下,我想根据视图是否折叠来做决定( 例如,如果展开,在详细视图中显示一条信息,如果折叠,则显示一个警告或其他指示 )。

12.2K20

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

,只提取你需要属性,并依靠 SwiftUI equality 检查来提前中止无效计算苹果工程师给出答案与 避免 SwiftUI 视图重复计算[5] 一文中很多建议都一致。...自定义布局Q:我经常想根据列表中最长或最短文字来布置各种小组件。鉴于动态文本大小在应用程序运行时可能会发生变化,衡量给定字体文本大小最佳方法是什么?A:你好!我们新布局协议支持这个功能。...A:你最好选择是使用 ScrollView 和 ScrollViewReader,并在 onAppear 或新内容进来时滚动到最底部视图。我建议尝试旋转滚动视图。...因为这些使用并不有害,我们希望开发者因为使用了新编译器版本而处理一堆警告。...因为通常情况下并不需要这个值,如果是要检测滚动掉,可以在 Xcode Organizer 里查看,或者用 MetricKit 生成报告,开发环境也可以使用 Instruments 。

14.8K30

SwiftUI 之 HStack 和 VStack 切换

前言 SwiftUI 各种堆栈是许多框架中最基本布局工具,能够让我们定义组视图,这些组视图可以按照水平、垂直或覆盖视图对齐。...然而,就像上面的代码展示那样,使用 GeometeryReader 来展示动态切换有一个相当明显缺点,在几何图形阅读器中总是会填充水平和垂直方向所有可用空间(以便测量实际空间)。...所有这些仍然使用紧凑垂直布局,它使用空间超过渲染其内容所需空间。...这样做会令动画更流畅,例如在切换设备方向时,我们也有可能在执行此类更改时获得小幅性能提升(因为 SwiftUI 总是在其视图层次结构为静态时尽可能表现最佳) 选择合适视图 但我们还没有结束,因为...结语 以上就是通过四种不同方式实现 DynamicStack 视图,它可以根据当前内容在 HStack 和 VStack 之间动态切换。 - EOF -

2.8K10

何在 SwiftUI 中熟练使用 visualEffect 修饰符

下面我们将学习如何在 SwiftUI使用 visualEffect 视图修饰符。介绍 visualEffect让我们从使用 visualEffect 视图修饰符最简单示例开始。...视觉效果是可以改变视图视觉外观但不影响其布局任何东西。在 SwiftUI 框架先前版本中,我们有视图修饰符,缩放、偏移、模糊、对比度、饱和度、不透明度、旋转等。...因此,你可以继续使用根据视图视图层次结构中框架和边界来动画化视图视觉外观。...此外,还提到了 GeometryProxy 类型使用,以及 visualEffect 对可动画值支持,使得可以根据视图和边界来动态调整视觉外观。...最后,指出了 visualEffect 修饰符在向后兼容性方面的注意事项,并建议在不需要布局信息情况下继续使用传统视图修饰符。

11511

论文简述 | Voxel Map for Visual SLAM

3D点相关联.虽然它们在计算上是高效,但是它们不能提供对场景几何更高层次理解.其他使用几何图元(橙色点)表示平衡了几何信息和效率,但对场景进行了假设,没有像稀疏关键方法那样实现效率.该文提出了一种用于稀疏...理想情况下,地图表示应该知道场景几何形状,并且在计算时间和内存方面是高效.图1显示了不同地图表示如何在这些轴上执行.理想表示应该允许更好几何推理,这带来了更高准确性.但在效率方面仍然与基于关键方法相当...我们沿着这些轴比较了基于稀疏关键地图表示有效性: 几何感知:在稀疏SLAM中,使用关键和它们可见点(即共视图)作为地图只允许有限几何推理.共可见度图没有遮挡概念,并且难以确定和过滤遮挡点,...M值,而取决于地图大小.通过Lucas-Kanade跟踪,系统进一步在新图像中搜索来自这些关键匹配.一旦建立了对应关系,就通过仅运动BA来估计姿态.系统还具有单独建图线程,该线程使用贝叶斯滤波器进行深度估计...相比之下,体素图能够以更低计算时间获得更好精度.它并不总是优于所有关键序列,因为体素图性能取决于环境和体素大小.在MH04情况下,体素图在轨迹上没有一致比例,这导致了更高RMSE.我们强调

1.2K20

高级 SwiftUI 动画 — Part 1:Paths

每当视图可动画参数发生变化时,SwiftUI 就会从旧值到新值制作动画。一些可动画参数包括大小(size)、偏移(offset)、颜色(color)、比例(scale)等。...我想到了一些大例外情况:路径(paths)、变换矩阵(matrices)和任意视图变化(例如,文本视图文本、渐变视图渐变颜色或停顿,等等)。在这种情况下,框架不知道该怎么做。...你只需要添加 .drawingGroup() 修饰符: FlowerView().drawingGroup() 根据 WWDC 2019, Session 237(用SwiftUI构建自定义视图):绘图组是一种特殊渲染方式...它将打开改变我们视图和动画新方法大门。与 Paths 一样,SwiftUI 没有关于如何在两个不同变换矩阵之间转换内置知识。GeometryEffect将有助于我们这样做。...目前,SwiftUI 没有关键功能。我们将看到我们如何用一个基本动画来模拟一个。

3.8K20

SwiftUI 布局 —— 尺寸( 上 )

尺寸 —— 一个刻意被淡化概念 SwiftUI 是一个声明式框架,提供了强大自动布局能力。开发者几乎可以在涉及尺寸( 或很少涉及 )这一概念情况下创建出漂亮、精美、准确布局效果。...SwiftUI 布局过程速览 SwiftUI 布局就是布局系统通过为视图树上节点提供必要信息,最终计算出每个视图( 矩形 )所需尺寸以及摆放位置行为。...第二阶段 —— 安置子民 在该阶段,父视图根据 SwiftUI 布局系统提供屏幕区域( 由第一阶段计算得出 )为子视图设置渲染位置和尺寸( 上方 5-6 )。...建议尺寸在布局两个阶段(讨价还价、安置子民)均会提供,但通常我们只需在第一个阶段使用它( 可以在第一阶段用 catch 保存中间计算数据,减少第二阶段计算量 )。...,当前容器视图使用该尺寸在它内部进行摆放 return cache.cropBounds.size } 根据建议尺寸内容不同,我们可以将建议尺寸细分为四种建议模式,在 SwiftUI

4.7K20

何在 SwiftUI 视图中显示应用图标和版本

在本文中,我将展示如何创建一个可访问 SwiftUI 视图,既能显示应用图标和版本,又能在各种文本大小和外观下看起来都很好:获取应用图标构建视图第一步是从主包中获取应用图标。...我们使用 fixedSize() 修饰符确保应用图标和 VStack 视图高度相同。最后,我们将所有子视图组合成一个可访问元素,并为其提供标签,以便为 VoiceOver 用户提供更好体验。...最终结果是一个在各种文本大小下都看起来很好视图:在应用中显示版本信息视图Copy codeContentView.swiftimport SwiftUIstruct ContentView: View...在获取到应用图标和版本信息后,我们创建了一个 SwiftUI 视图来展示这些信息。该视图使用水平堆栈(HStack)布局,将应用图标和版本信息并排显示。...同时,我们通过使用 fixedSize() 修饰符确保视图高度一致,并使用 accessibilityElement 使其对 VoiceOver 用户友好。

14222

SwiftUI 中布局工作原理

SwiftUI 中布局工作原理 ---- 所有的 SwiftUI 布局都有三个简单步骤,理解这些步骤是每次获得优秀布局关键。步骤如下: 父视图提供一个大小并询问其子视图大小。...子视图根据自己信息,它会选择自己尺寸,而父视图必须尊重这个选择。 然后父视图在其坐标空间中定位子视图。...您所见,ContentView主体(它呈现内容)是一些带有背景色文本。所以ContentView大小总是和它主体大小一样,不多不少。...“(父视图询问大小) ContentView:“我不在乎;我是布局中立。让我问我孩子:嘿,背景,你可以使用整个屏幕——你需要多少?“(父父视图询问大小) 背景:“我也不在乎;我布局也是中性。...第二个有趣副作用是我们前面遇到:如果我们在一个不能调整大小图像上使用 frame(),我们会得到一个更大 Frame,而图像内部没有改变大小

3.8K20

AnyView 对 SwiftUI 性能影响

前言AnyView 是一种类型擦除视图,对于 SwiftUI 容器中包含异构视图非常方便。在这些情况下,你不需要指定视图层次结构中所有视图具体类型。...当使用 FPS 作为度量标准时,重要是指定最大速率(在这种情况下为 60),并在应用程序没有活动时丢弃值。浏览数据首先,让我们看看在浏览内容时不同实现会表现如何。...没有 AnyView在没有 AnyView 包装器情况下进行测试产生了与常规滚动测试相似的结果(58-59 FPS)。这也是预期,因为 SwiftUI 知道视图标识和结构。...当需要更新视图时,仅对其进行更改(例如,向视图添加另一个反应)。有 AnyView当我们在这种情况下使用 AnyView 时,事情就变得有趣了 - 在短时间内对屏幕上视图进行频繁更新。...由于在几秒钟内强制重绘视图多次,丢失在这里更加明显。由于 SwiftUI 不知道这个视图是什么,我假设它每次都会从头开始重绘。

11100

高级 SwiftUI 动画 — Part 2:GeometryEffect

在这个例子中,我们效果将通过一个任意路径移动一个视图。这个问题有两个主要挑战: 1.如何获取路径中特定点坐标。 2.如何在通过路径移动时确定视图方向。...它包含了该段路径边界。根据我们需求,我们只需用使用非常接近起点和终点来调用它。它将返回一个非常小矩形,我们将使用其中心作为我们X和Y位置。...使用上面描述技术,我们将得到两点X和Y位置:当前位置和刚才位置。通过创建一条假想线,我们可以计算出它角度,这就是飞机方向了。...返回一个产生与此效果相同几何变换效果,但只在渲染其视图时应用该变换。 Use this method to disable layout changes during transitions....使用此方法可以在转换期间禁用布局更改。在视图执行布局计算时,视图将忽略此方法返回变换。 我很快就会介绍过渡内容。同时,让我介绍一个例子,使用.ignoredByLayout()有一些明显效果。

1.3K30

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

将visionOS与熟悉工具和技术一起使用,为空间计算构建沉浸式应用程序和游戏。 靓仔,如果你想为visionOS开发软件,那前提是需要一台带有苹果芯片Mac。...将你应用扩展到沉浸式空间 从熟悉基于窗口体验开始,向人们介绍您内容。从那里,添加特定于visionOSSwiftUI场景类型,卷和空间。...视图为您界面提供基本内容,您可以使用SwiftUI修饰符自定义视图外观和行为。...根据需要将深度效果合并到自定义视图中,并使用3D布局选项来安排窗口中视图。 为视图应用shadow(color:radius:x:y:) 或visualEffect(_:)修饰符。...使用修饰符定位SwiftUI视图使用转换组件定位RealityKit实体。SwiftUI最初将空间原点放在人脚上,但可以根据其他事件改变这个原点。

84240

自定义 SwiftUI 中符号图像外观

SwiftUI使用符号图像非常简单,只需使用 Image 视图和所需符号系统名称。...要调整符号大小,我们可以应用 font() 修饰符,就像在Text视图中一样。这使我们能够将符号大小与不同文本样式对齐,确保UI视觉一致性。...有三个选项:小、中、大,它们根据字体大小按比例缩放符号。如果没有明确设置字体,符号将从当前环境中继承字体。...颜色使用SwiftUIforegroundStyle()视图修饰符,可以轻松自定义符号图像颜色。这个修饰符允许我们直接设置符号图像颜色。...填充变体由于其实心区域,使符号更具视觉强调性,非常适合用于 iOS 标签栏、滑动操作以及指示选择强调颜色场景。在许多情况下,显示符号视图会自动选择合适变体。

8610

探讨 SwiftUI几个关键属性包装器

它常用于简单 UI 组件状态管理,开关状态、文本输入等。 如果数据不需要复杂视图共享,使用 @State 可以简化状态管理。...详见 避免 SwiftUI 视图重复计算[7]。 如果不需要在当前视图或在子视图中(通过 @Binding )修改值,无需使用 @State。...它创建了值( Bool)与显示及修改这些值 UI 元素之间双向连接。 @Binding 直接持有数据,而是提供了对其他数据源读写访问包装。...典型应用场景 当需要访问和响应界面样式(暗模式/亮模式)、设备方向、字体大小等由系统或上层视图提供环境值时( 通常对应值类型)。.../ [7] 避免 SwiftUI 视图重复计算: https://fatbobman.com/posts/avoid_repeated_calculations_of_SwiftUI_views/

23910
领券