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

SwiftUI 布局工作原理

在此过程,您还将学习如何创建更高级布局对齐,使用GeometryReader构建特殊效果,以及更多——我知道您会热衷于在自己应用程序中部署一些真正强大功能。...SwiftUI 布局工作原理 ---- 所有的 SwiftUI 布局都有三个简单步骤,理解这些步骤是每次获得优秀布局关键。步骤如下: 父视图提供一个大小并询问其子视图大小。...如果我们把这个放到三步布局系统,我们最终会有一个类似这样对话: SwiftUI:“嘿,ContentView,你自己拥有整个屏幕——你需要多少?...首先,如果视图层次结构完全是布局中立,那么它将自动占用所有可用空间。...例如,形状和颜色是与布局无关,因此,如果视图包含颜色而没有其他内容,它将自动填充屏幕,如下所示: var body: some View { Color.red } 记住,Color.red本身就是一个视图

3.7K20

SwiftUI 布局 —— 对齐

在 WWDC 2022 ,苹果为 SwiftUI 增添了 Layout 协议,让我们有了更多机会了解和验证 SwiftUI 布局原理。...在 SwiftUI ,对齐是指在布局容器,将多个视图按照对齐指南( Alignment Guide )进行对齐。...在 SwiftUI ,系统预置对齐指南都提供了对不同布局方向支持。...VStack、HStack、ZStack 等支持多视图布局容器 你是否了解 SwiftUI 常用布局容器构造方法对齐参数含义?它们又是如何实现呢?...因为在布局容器构造方法设定对齐指南只用于容器子视图之间。 为了更好地理解之所以描述二才是正确,我们需要对 SwiftUI 布局原理以及 ZStack 处理方式有所了解。

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

SwiftUI 布局 —— 尺寸( 上 )

尺寸 —— 一个刻意被淡化概念 SwiftUI 是一个声明式框架,提供了强大自动布局能力。开发者几乎可以在不涉及尺寸( 或很少涉及 )这一概念情况下创建出漂亮、精美、准确布局效果。...VStack、ZStack、List 等布局视图外,在 SwiftUI ,大量布局容器是以视图修饰器形式存在。...这类视图本身并不会参与布局SwiftUI 布局系统会在布局自动将它们忽略,让其子视图与具备布局能力祖先视图直接联系起来。...SwiftUI 尺寸 如上文中所示,在 SwiftUI 布局过程,在不同阶段、出于不同用途,尺寸这一概念是在不断地变化。...本节将结合 SwiftUI 4.0 Layout 协议对布局过程涉及尺寸做更详细介绍。

4.7K20

SwiftUI-布局案例

介绍 import SwiftUI struct ContentView : View { var body: some View { Text("Hello World...子视图计算自己实际尺寸。 父视图根据子视图尺寸将子视图放在自身坐标系。 最重要是第 2 步,通常有 3 种设置尺寸方式。...Stack2.png 复杂案例 第 1 步:堆栈计算出内部间距和边距,并将其从其父视图建议大小减去。 第 2 步:对于每个剩余视图,堆栈将剩余空间分成相等部分。...frame(width: 280, height: 200) .border(Color.blue) } } 总宽度间距为 300,其中间距为 2 * 10,边距为 2 * 10,所以布局空间为...堆栈将空间分成 3 个相等部分,每个部分宽度为 80。 将 80 这个尺寸推荐给最不灵活孩子。案例为 Image,其尺寸为 80x80。

12910

SwiftUI 布局 —— 尺寸( 下 )

欢迎大家在 Discord 频道[2] 中进行更多地交流 在 上篇[3] ,我们对 SwiftUI 布局过程涉及众多尺寸概念进行了说明。...本篇,我们将通过对视图修饰器 frame 和 offset 仿制进一步加深对 SwiftUI 布局机制理解,并通过一些示例展示在布局时需要注意问题。...相同长相、不同内涵 在 SwiftUI ,我们可以利用不同布局容器生成看起来几乎一样显示结果。...frame 无论在功能上还是实现上均有巨大不同,因此在 SwiftUI 它们分别对应着不同布局容器。...SwiftUI 布局机制窗口,无论你在未来工作是否需要使用 Layout 协议创建自定义布局容器,掌握它都将获得莫大好处。

2.6K40

SwiftUI 方式进行布局

本文将通过用多种手段完成同一需求方式,展示 SwiftUI 布局系统强大与灵活,并通过这些示例让开发者对 SwiftUI 布局逻辑有更多认识和理解。...下文中,我们将用 SwiftUI 布局系统提供多种手段来实现该要求。在这些解决方案,有些非常简单、直接,有些则会略显烦琐,曲折。我尽量让每种方案都采用不同布局逻辑。...有关这方面的内容,请参阅 SwiftUI 布局 —— 尺寸( 下 )[4] 一文“面子和里子”章节。...七、Transition 通过为视图设定 Transition( 转场 ),在视图插入或将其移出视图树时,SwiftUI自动生成对应动画效果。...有关转场动画更多内容,请参阅 SwiftUI 动画机制[8] 一文 八、Layout 协议 在 4.0 版本SwiftUI 增加了 Layout 协议,通过该协议,开发者可以针对特定场景,创建自定义布局容器

3.2K00

SwiftUI 方式进行布局

本文将通过用多种手段完成同一需求方式,展示 SwiftUI 布局系统强大与灵活,并通过这些示例让开发者对 SwiftUI 布局逻辑有更多认识和理解。 可在 此处 获取本文代码。...下文中,我们将用 SwiftUI 布局系统提供多种手段来实现该要求。在这些解决方案,有些非常简单、直接,有些则会略显烦琐,曲折。我尽量让每种方案都采用不同布局逻辑。...有关这方面的内容,请参阅 SwiftUI 布局 —— 尺寸( 下 ) 一文“面子和里子”章节。...七、Transition 通过为视图设定 Transition( 转场 ),在视图插入或将其移出视图树时,SwiftUI自动生成对应动画效果。...有关转场动画更多内容,请参阅 SwiftUI 动画机制 一文 八、Layout 协议 在 4.0 版本SwiftUI 增加了 Layout 协议,通过该协议,开发者可以针对特定场景,创建自定义布局容器

4.8K80

解析SwiftUI布局细节(一)

前言 ---- 在前面的文章谈了谈对SwiftUI基本认识,以及用我们最常见TB+NA方式搭建了一个很基本场景来帮助认识了一下SwiftUI,具体文章可以在SwiftUI分类部分查找...,这篇我准备在写UI时候从SwiftUI角度我们具体应该怎样去做,或者说是用SwiftUI我们该从什么角度去解析一个页面。...,我们用SwiftUI时候该怎样去开始呢,用SwiftUI时候流程还会和我们使用UIKit处理时候还一样吗?...我们从一个具体实际页面开始梳理一下用SwiftUI实际写UI时候一些基本知识,就如我们Demo页面举例: ?...不知道看到这大家对ViewBuilder应该有了一些认识了吧,我会在后面的参考文章具体在给几个例子地址,大家可以再仔细看看,我们就看我们Demo一个使用,他具体一个场景是这样,在登录页面,

2.3K10

SwiftUI 布局协议 - Part 1

简介 今年 SwiftUI 新增最好功能之一必须是布局协议。它不但让我们参与到布局过程,而且也给了我们一个很好机会去更好理解布局SwiftUI 作用。...这个框架使用了漂亮 Swift 语言技巧使你布局代码在向 SwiftUI 插入时产生一个透明视图 。我将在后面-高明伪装者部分说明。...就像我在以前文章 SwiftUI frame 表现 所描述那样,在布局过程,父视图给子视图提供一个尺寸,但最终还是由子视图决定如何绘制自己。然后,它将此传达给父视图,以便采取相应动作。...如果你想了解更多这些行为以及如何改变它们,请查看我以前文章 SwiftUI frame 表现 我们第一个布局实现 创建一个布局类型需要我们实现至少两个方法, sizeThatFits 和 placeSubviews...无论如何,在没有缓存情况下编写我们布局更简单一点,当我们以后需要时再添加。SwiftUI 已经做了一些缓存。例如,从子视图代理获得值会自动存储在缓存。相同参数反复调用将会使用缓存结果。

3.3K10

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

2、稍微复杂点View布局思路和一些细节知识 3、SwiftUI循环轮播图 这次总结首页UI布局如下,我们下面一点点解析: ?...NavigationView + NavigationLink 界面跳转,在苹果给 SwiftUI 使用例子中就是这样写,当然我们在正常使用这样写也没啥问题,那我们界面跳转问题是什么呢?...首页布局 ---- 我们把首页这个布局给解析一下,大概分了下面几部分,我们再具体说说: ?...3、再提一点关于上面说滚动视图,在UIKit我们可以用UICollectionView搞定一切,但是在SwiftUI没有这个控件,我建议采用方式是 ScrollView + HStack + VStack...循环轮播实现 ---- 总结一下循环轮播怎么实现,采用方案就是 HStack + Gesture + Timer 方式,这三者就能实现一个自动循环滚动或者手动滚动轮播。

11.9K20

SwiftUI 布局协议 - Part2

简单说,通过添加 animatableData 属性到我们布局,我们要求 SwiftUI 动画每一帧重新计算布局。但是,在每个布局传递,角度都会收到一个内插值。...这是个老问题,我在 SwiftUI 刚发布时候就写过此类问题,在 Safely Updating The View State [1] 一文可以查看更多信息。 我还想再提一下潜在崩溃。...这是你在写任何布局都必须要考虑。我们提到 SwiftUI 可能会多次调用 sizeThatFits 去测试视图灵活性。在这些调用,你返回值应该是合理。...此外,在与其他视图布局工作时候,我们就相当于 SwiftUI 角色。子布局任何缓存创建和更新都属于我们责任,幸运是,这都很容易处理。我们只需要添加子布局缓存到我们自己缓存里。...总结 即使你不打算写你自己布局容器,明白它是如何工作也会帮助你理解布局SwiftUI 一般工作方式。

2.7K30

SwiftUI Stack

昨天我们简单浏览了一下SwfitUI,今天看看里面的组件吧 就从Stack说起,stack查看文档我们看到HVZ三种stack,那么分别是怎么用呢?...ZStack import SwiftUI struct SKZStack :View { var body: some View{ ZStack { Text(...从图观察我们知道,ZStack是大家在水平规则上一样,然后进行z方向叠加,理解起来就是我们是个显示屏是平面,在这个基础上来个垂直于屏幕方向上设置个轴线按次序把UI叠放在上面 VStack import...SwiftUI struct SKVStack: View { var body: some View { VStack(alignment: HorizontalAlignment.leading...这个很明显啦,就是大家按次序从上往下按照先后顺写在一个平面排列起来,有点类似排队感觉 HStack import SwiftUI struct SKHStack:View { var body

2.2K10

SwiftUI 布局:如何自定义 AlignmentGuides

SwiftUI 为我们提供了视图不同边缘对齐指南(.leading、trailing、top等)以及.center和两个基线选项来帮助文本对齐。...为了解决这个问题,SwiftUI 允许我们创建自定义对齐辅助线,并在整个 UI 视图中使用这些辅助线。在这些视图之前或之后发生什么并不重要,它们仍然会排成一条线。...例如,下面的布局在左侧显示我 Twitter 帐户名和我个人资料图片,右侧显示 “Full name:” 加上 “Wei Xian” 大号字体: struct ContentView: View...水平堆栈内部包含两个垂直堆栈,因此没有内置方法来获得所需对齐方式——像HStack(alignment: .top) 这样方便方式。 要解决这个问题,我们需要定义一个自定义布局指南。...我建议您尝试在我们示例前后添加更多文本视图 –SwiftUI 将重新定位所有内容,以确保我们对齐两个视图保持不变。

99210

解析SwiftUI布局细节(三)地图基本操作

(点击地图位置会获取经纬度,反地理编译得到具体位置信息,显示在列表SwiftUI怎样使用UIKit控件 ---- 我们来总结一下,SwiftUI怎么使用UIKit控件,中间连接就是...首先有一点,在SwiftUI我们创建View都是Struct类型,但手势事件是#selector(),本质上还是OC东西,所以在事件前面都是带有@Obic修饰符,但你要是Struct类型肯定是行不通...其实在我们使用UIKit时候如许多复用问题我们基本上都是通过写数据再Model里面去解决SwiftUI 也不例外。...地图使用 ---- 我们结合SwiftUI总结一下地图使用,这部分代码去Demo看比较有效果,地图我们使用 CoreLocation 框架,在这个 Demo 我们使用到关于 CoreLocation...,回到给你就是一个元素是 CLLocation 类型数组,我们在Demo只取了First,你拿到是经纬度,你要想获取这个经纬度具体位置信息就得经过反地理编码,拿到某某市区某某街道某某位置信息

2.1K10

SwiftUI 内容边距

前言SwiftUI 引入了一组视图修饰符,使我们能够有效地管理视图中安全区域。在许多情况下,安全区域是你希望放置内容地方。...不幸是,我们在 SwiftUI 无法访问 readableContentGuide。...你可以在 Playground 运行此代码以查看结果。总结本文介绍了 SwiftUI 内容边距管理,通过对比安全区域概念,解释了内容边距重要性。...随后,通过介绍 UIKit readableContentGuide 布局指南以及 SwiftUI safeAreaPadding 视图修饰符,展示了在 iPad 上适配内容边距方法。...通过本文,读者可以更好地理解并掌握 SwiftUI 内容边距管理技巧。我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

14732

IOS Widget(3):SwiftUI开发小组件布局入门

引言   经过上一篇文章,我们已经可以在桌面上展示出一个小组件出来了,你肯定想小试牛刀,动手改一改,那我们就从改小组件布局做起吧。...本文不会讲解Swift语法,如果是熟悉Flutter,Kotlin这种语言,问题也不大。本文只讲解小组件中常用SwiftUI组件。...小组件布局怎么区分组件型号:大中小 struct Widget1EntryView : View { // 这句代码能从上下文环境取到小组件型号 @Environment(\.widgetFamily...Image("imageName") // 通过UIImage加载文件夹图片资源 Image(uiImage: UIImage(contentsOfFile: "picPath") ??...布局就讲这么多,入个门差不多了,另外,小组件并不能使用全部SwiftUI控件,只能使用一些基本控件,更多详情可以查看官网 https://developer.apple.com/documentation

3K20

SwiftUI水平条形图

SwiftUI水平条形图 水平条形图以矩形条形式呈现数据类别,其宽度与它们所代表数值成正比。本文展示了如何在垂直条形图基础上创建一个水平柱状图。 水平条形图不是简单垂直条形图旋转。...在Numbers 等应用程序,水平条形图被定义为独立图表类型,而不是垂直条形图。除了条形差异外,x轴和y轴格式也需要不同。...Bar Chart with multiple data sets in SwiftUI SwiftUI 水平条形图 将条形图转换为水平 水平条形图不仅仅是在垂直条形图上配置,有一些元素是可以重复使用...它控制了图表布局,其中三个视图被改为YaxisHView、ChartAreaHView和XaxisHView,它们最初只是垂直条形图中使用视图副本。...改变,以水平方式布局条形。

4.8K20

如何在SwiftUI实现interactiveDismissDisabled

如何在SwiftUI实现interactiveDismissDisabled 如想获得更好阅读体验,可以访问我博客www.fatbobman.com[1] 本文中我们将探讨如何实现一个SwiftUI...3.0新增功能——interactiveDismissDisabled增强版;如何创建更SwiftUI功能扩展。...去年9月,我在文章【在SwiftUI制作可以控制取消手势Sheet】[3]中介绍了健康笔记2.0[4]版本Sheet控制实现方法。...在今年推出SwiftUI 3.0版本,苹果添加了一个新View扩展:interactiveDismissDisabled,该扩展实现了上面的第一个要求——通过代码控制是否允许手势取消Sheet。...这种实现是我所喜欢,也给了我很大启发。 在WWDC 2021 观后感[6]一文,我们已经探讨过SwiftUI3.0将会影响非常多第三方开发者编写SwiftUI扩展思路和实现方式。

3.8K40
领券