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

如何将大小更改通知给SwiftUI子视图

在SwiftUI中,可以使用@State属性包装器来实现大小更改的通知。@State属性包装器用于声明一个可以在视图内部进行更改的状态属性。当状态属性的值发生更改时,SwiftUI会自动重新计算和更新相关的视图。

要将大小更改通知给SwiftUI子视图,可以遵循以下步骤:

  1. 创建一个状态属性来存储视图的大小信息。可以使用CGSize类型来表示视图的宽度和高度。例如:
代码语言:txt
复制
@State private var viewSize: CGSize = .zero
  1. 在父视图中,使用GeometryReader视图包装子视图,并将子视图的大小信息传递给状态属性。GeometryReader是一个强大的视图容器,可以提供关于其父视图大小和坐标空间的信息。例如:
代码语言:txt
复制
GeometryReader { geometry in
    ChildView()
        .frame(width: geometry.size.width, height: geometry.size.height)
        .onAppear {
            viewSize = geometry.size
        }
}

在上述代码中,GeometryReader包装了ChildView(),并使用frame修饰符将子视图的大小设置为父视图的大小。在onAppear闭包中,将父视图的大小信息赋值给状态属性viewSize

  1. 在子视图中,可以使用@Binding属性包装器来接收父视图传递的大小信息。@Binding属性包装器用于声明一个可以从父视图传递的绑定属性。例如:
代码语言:txt
复制
struct ChildView: View {
    @Binding var size: CGSize
    
    var body: some View {
        // 子视图的内容
    }
}

在上述代码中,ChildView接收一个名为size@Binding属性,用于存储父视图传递的大小信息。

通过以上步骤,当父视图的大小发生更改时,viewSize状态属性会更新,并且子视图的size属性也会相应地更新。子视图可以使用size属性来响应父视图大小的变化,并进行相应的布局和显示调整。

这是一个基本的示例,展示了如何将大小更改通知给SwiftUI子视图。根据具体的应用场景和需求,可能需要进一步的调整和扩展。腾讯云相关产品和产品介绍链接地址暂时无法提供,请您自行查阅相关资料。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SwiftUI 布局协议 - Part 1

早在2019年,我写了一篇文章SwiftUI 中 frame 的表现[1],其中,我阐述了父视图视图如何协调形成最终视图效果。那里描述的许多情况需要通过观察不同测试的结果去猜测。...就像我在以前的文章 SwiftUI 中 frame 的表现 所描述的的那样,在布局过程中,父视图视图提供一个尺寸,但最终还是由视图决定如何绘制自己。然后,它将此传达视图,以便采取相应的动作。...在这 120pt 中,文本只需要 74,并传达视图,父视图现在可以拿走多余的 46pt 其他的视图用。因为其他视图是图形,所以它们可以接收给它们的一切东西。...将会调用 sizeThatFits 方法决定我们布局容器的尺寸,当我们写这个方法我们应该认为我们既是父视图又是视图:当作为父视图时需要询问视图的尺寸,当我们是视图时,要基于我们视图的回复告诉父视图需要的尺寸...这样, SwiftUI 就会知道如何将其与周围的视图分开,为此,你需要实现布局方法 spacing(subviews:cache:)。

3.3K10

React核心成员表示:JSX就是个错误

HTML描述视图能力最强(因为与DOM节点一一对应),但是缺乏编程能力。 Pug、Vue、JSX 视图描述能力:??? 编程能力:??~??? ?...与React SwiftUI作为被苹果寄予厚望、意图统领IOS全平台的DSL。...同时,SwiftUI凭借强大的编程能力,原生实现React当前并不支持的功能: ? 比如,在React中,组件要改变父组件的状态,需要父组件将「状态」与「改变状态的方法」传递给组件。...组件调用「改变状态的方法」通知父组件状态变化,父组件再传递变化后的「状态」组件。 这种方式在React中被称为「受控组件」。...在SwiftUI中,组件只需要将父组件传递的状态申明为@Binding,就能达到与父组件该状态「双向绑定」的效果。

1.3K30
  • GeometryReader :好东西还是坏东西?

    确切来说,GeometryReader 的作用主要是获取父视图大小、frame 等几何信息。...( Required Size )返回视图 将父视图的建议尺寸作为自身的建议尺寸传递给视图视图的原点(0,0)置于 GeometryReader 的原点位置 其理想尺寸( Ideal Size...为此,我们首先需要理解 SwiftUI 的布局原理。 SwiftUI 的布局是一个协商过程。父视图视图提供建议尺寸,视图返回需求尺寸。...父视图是否根据视图的需求尺寸来放置视图,以及视图是否根据父视图给出的建议尺寸来返回需求尺寸,完全取决于父视图视图的预设规则。...VStack 会结合视图的优先级,它的父视图其的建议尺寸,在摆放时对子视图提出最终的建议尺寸。

    63070

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

    修改现有的窗口页面链接 使用标准的SwiftUI视图构建初始接口。视图为您的界面提供基本内容,您可以使用SwiftUI修饰符自定义视图的外观和行为。...使用rotation3DEffect(_:axis:anchor:anchorZ:perspective:)修饰符旋转视图。 除了2D视图更多的深度,你也可以添加静态3D模型到你的2D窗口。...Model3D视图加载USDZ文件或其他资产类型,并在窗口中以其固有大小显示它。在你的应用中已经有模型数据的地方使用它,或者可以从网络上下载它。...这个SwiftUI视图作为你的RealityKit内容的容器,并允许你使用熟悉的SwiftUI技术更新内容。 下面的例子展示了一个使用RealityView来显示3D球体的视图。...由于创建实体的成本相对较高,因此视图只运行一次创建代码。当您想要更新实体的状态时,请更改视图的状态并使用update闭包将这些更改应用于内容。

    94740

    SwiftUI @State @Published @ObservedObject 深入理解和使用

    @State 介绍 因为SwiftUI View 采用的是结构体,当创建想要更改属性的结构体方法时,我们需要添加mutating关键字,例如: mutating func doSomeWork() 然而...@State允许我们绕过结构体的限制:我们知道不能更改它们的属性,因为结构是固定的,但是@State允许SwiftUI将该值单独存储在可以修改的地方。...提示:在SwiftUI中存储程序状态有几种方法,您将学习所有这些方法。@State是专门为存储在一个视图中的简单属性而设计的。...因为SwiftUI更新数据的前提是触发 第一层 绑定的对象 wrapperModel下的属性(字段)发生更新才会调用视图层更新数据 但是 第一次下绑定的对象还绑定了 @ObservedObject 或者其他类型的对象呢.../// 那我们可以 ObservableObject 加一个 无关紧要的字段,然后编写一个方法,来通知更新 class BaseobservableObject: ObservableObject

    3.2K10

    SwiftUI 与 Core Data —— 数据获取

    ,并根据通知内容( insert、delete、update 等 )自动更新内存中数据集。...当 SwiftUI视图存续期中重新创建视图描述实例时,自定义类型也将一并重新创建在视图存续期中,如果 SwiftUI 创新创建了视图描述实例,那么无论视图描述( 符合 View 协议的 Struct...这意味着,尽管我们只能在 update 方法中更改数据,但必须要想办法错开该更新周期。...( 在 @State 中持有引用 ),便可以达成如下目的:1、让数据的生命周期与视图生存期一致;2、数据可更改;3、更改数据不会引发视图更新。...这是由于一旦 SwiftUI 的惰性容器中出现了多个 ForEach ,惰性容器将丧失对子视图的优化能力。任何数据的变动,惰性容器都将对所有的视图进行更新而不是仅更新可见部分的视图

    4.6K30

    高级 SwiftUI 动画 — Part 1:Paths

    每当视图上的可动画参数发生变化时,SwiftUI 就会从旧值到新值制作动画。一些可动画的参数包括大小(size)、偏移(offset)、颜色(color)、比例(scale)等。...让我们尝试举一些例子来说明: 以下示例使用隐式动画更改图像的大小和不透明度: struct Example1: View { @State private var half = false...在这里,缩放和不透明度都会更改,但只有不透明度会设置动画,因为它是 withAnimation 闭包中唯一更改的参数: struct Example2: View { @State private...当一个视图制作动画时,SwiftUI 实际上是多次重新生成该视图,并且每次都修改动画参数。这样,它就会从原点值渐渐走向最终值。 假设我们为一个视图的不透明度创建一个线性动画。...SwiftUI 已经为不透明度制作了动画,而不需要我担心这一切。是的,这是真的,但只要 SwiftUI 知道如何将数值从原点插值到终点。对于不透明度,这是一个直接的过程,SwiftUI 知道该怎么做。

    3.8K20

    SwiftUI 中布局的工作原理

    SwiftUI 中布局的工作原理 ---- 所有的 SwiftUI 布局都有三个简单的步骤,理解这些步骤是每次获得优秀布局的关键。步骤如下: 父视图提供一个大小并询问其视图大小。...视图根据自己的信息,它会选择自己的尺寸,而父视图必须尊重这个选择。 然后父视图在其坐标空间中定位子视图。...在幕后,SwiftUI 执行第四步:尽管它将位置和大小存储为浮点数,但在渲染时,SwiftUI 会将所有像素舍入到最接近的值,这样我们的图形仍然清晰。...嘿,SwiftUI:我需要X * Y像素。” SwiftUI:“好的。那么,这会留下很多空间,所以我会把你的尺寸放在中间。”(父视图在其坐标空间中定位子视图。)...background(Color.red)),文本视图成为其背景的视图。当涉及到视图及其修改器时,SwiftUI有效地从下到上工作。

    3.8K20

    SwiftUI 布局 —— 尺寸( 上 )

    ),我们简述一下 SwiftUI 的布局过程( 当前设备为 iPhone 13 Pro ): SwiftUI 的布局系统为 ZStack 提供一个建议尺寸( 390 x 763 该尺寸为设备屏幕尺寸去掉安全区域的大小...第二阶段 —— 安置子民 在该阶段,父视图将根据 SwiftUI 布局系统提供的屏幕区域( 由第一阶段计算得出 )为视图设置渲染的位置和尺寸( 上方的 5-6 )。...这类视图本身并不会参与布局,SwiftUI 的布局系统会在布局时自动将它们忽略,让其视图与具备布局能力的祖先视图直接联系起来。...x 50 作为需求尺寸返回视图 fixedSize() 为视图提供未指定模式的建议尺寸 frame(minWidth: 100, maxWidth: 300) 将视图的需求尺寸控制在指定的范围中...,并将调整后的尺寸作为需求尺寸返回视图 frame(idealWidth: 100, idealHeight: 100) 如果当前视图收到为未指定模式的建议尺寸,则返回 100 x 100 的需求尺寸

    4.8K20

    避免 SwiftUI 视图的重复计算

    并且 SwiftUI 会在其变化时自动更新( 重新计算 )对应的视图SwiftUI 上有一个困扰了不少人的问题:为什么无法在视图的构造函数中,更改 State 包装的变量值?...与符合 DynamicProperty 协议的属性包装器主动驱动视图更新的机制不同,SwiftUI 在更新视图时,会通过检查视图的实例是否发生变化( 绝大多数都由构造参数值的变化导致 )来决定对子视图更新与否...这是因为,我们将 Student 类型作为参数传递给了视图SwiftUI 在比对实例的时候,并不会关心子视图中具体使用了 student 中的哪个属性,只要 student 发生了变化,那么就会重新计算...为了解决这个问题,我们应该调整传递给视图的参数类型和内容,仅传递视图需要的数据。...当触发器接收到事件后,无论其是否更改当前视图的其他状态,当前的视图都会被更新。

    9.3K81

    SwiftUI中使用UIKit视图

    本文将通过对UITextField的包装来讲解以下几点: •如何在SwiftUI中使用UIKit视图•如何让你的UIKit包装视图具有SwiftUI风格•在SwiftUI使用UIKit视图需要注意的地方...其调用时机同标准SwiftUI视图的body一致,最大的不同为,调用body为计算值,而调用updateview仅为通知UIViewRepresentable视图依赖有变化,至于是否需要根据这些变化来做反应...在绘制屏幕时,会从视图树的顶端开始对视图的body求值,如果其中还包含视图则将递归求值,直到获得最终的结果。...在协调器中,我们可以通过双向绑定(Binding),通知中心(notificationCenter)或其他例如Redux模式的单项数据流等方式,将UIKit视图内部的状态报告SwiftUI框架或其他需要的模块...希望本文能对你学习和了解如何将UIKit组件导入SwiftUI提供一点帮助。

    8.2K22

    SwiftUI 布局协议 - Part2

    如果我们想要这些效果,那么布局应该有一种传达回视图的方式。这时候布局值就变得重要起来,到目前为止,我们已经使用它们传递信息布局,但只要加上一点创意,我们就可以反向使用它们。...例如,如果用 placeSubviews 设置去更改视图颜色,那就是安全的。在案例中,可能看起来旋转会影响布局,但其实不是这样的,当你旋转视图,它的周围从来没产生影响,边界仍然保持不变。...视图的缩放和旋转要再一次使用双向自定义值实现。 在这个例子中在容器中一共有44个视图,所以我们的新容器将会分别以12,12,12和8为一圈。 注意本案例中如何使用缓存与视图通信。...此外,在与其他视图布局工作的时候,我们就相当于 SwiftUI 的角色。布局的任何缓存创建和更新都属于我们的责任,幸运的是,这都很容易处理。我们只需要添加布局缓存到我们自己的缓存里。...相比于使用布局值去分别通知树的每个节点的最终位置,使用布局代码创建整个路径来的更简单一点。然后,我们只需要将路径返回负责展示的视图。通过添加绑定布局参数很容易完成。

    2.7K30

    SwiftUI-数据流

    数据处理的基本原则 Data Access as a Dependency:在 SwiftUI 中数据一旦被使用就会成为视图的依赖,也就是说当数据发生变化了,视图展示也会跟随变化,不会像 MVC 模式下那样要不停的同步数据和视图之间的状态变化...,属性观察器就会调用,告诉objectWillChange发布者发布有关我们的数据已更改的消息,以便所有订阅的视图都可以刷新的消息 var name = "" { willSet...数据流图 从上图可以看出SwiftUI 的数据流转过程: 用户对界面进行操作,产生一个操作行为 action 该行为触发数据状态的改变 数据状态的变化会触发视图重绘 SwiftUI 内部按需更新视图,...最终再次呈现用户,等待下次界面操作 注意 在 SwiftUI 中,开发者只需要构建一个视图可依赖的数据源,保持数据的单向有序流转即可,其他数据和视图的状态同步问题 SwiftUI 帮你管理,所以 ViewController...,这种视图的拼装方式大大提高了界面开发的灵活性和复用性,视图组件化并任意组合的方式是 SwiftUI 官方非常鼓励的做法。

    10.2K20

    为什么SwiftUI视图使用结构体?

    SwiftUI并非如此:我们更喜欢将结构体用于整体视图,这有两个原因。 首先,有一个性能因素:结构体比类更简单,更快。...在SwiftUI中,我们所有的视图都是简单的结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数的结构体,则结构体的整个大小就是:一个整数。没有其他的。...1000个SwiftUI视图甚至100,000个SwiftUI视图也是如此。他们是如此之快,以至于不再值得考虑。...您会发现,类能够自由更改其值,这可能导致代码混乱——SwiftUI如何知道什么更改了值并需要更新UI?...通过生成不会随时间变化的视图SwiftUI鼓励我们转向更具功能性的设计方法:在将数据转换为UI时,我们的视图变成简单的,惰性的东西,而不是会失去控制的智能化的东西。

    3.2K10

    onAppear 的调用时机

    在一个视图的生存期中,SwiftUI 可能会多次创建视图实例。 由于惰性视图的优化机制,对于尚未处于可见区域的视图SwiftUI 不会创建其实例 求值 一个被显示的视图至少会经历一次的过程。...布局 在计算好当前需要显示的视图所有的视图值后,SwiftUI 将进入到布局阶段。通过父视图视图提供建议尺寸,视图返回需求尺寸这一过程,最终计算出完整的布局结果。...: SwiftUI 首先对视图进行求值( 由外向内 ) 在全部求值结束后开始进行布局( 由父视图视图 ) 在布局结束后,调用视图对应的 onAppear 闭包( 顺序不明,不要假定 onAppear...newWords 为空,但也不会有问题 完成布局 调用 onAppear 闭包, newWords 赋值 由于 newWords 是该视图的 Source of truth ,发生改变后,导致视图重新刷新...重复上面的过程,此时 newWords 已经有值了,ForEach 将正常处理所有的视图 总结 在本文中,我们通过 SwiftUI 4 提供的新工具明确了 onAppear 的调用时机,或许这是新

    1.1K10

    onAppear 的调用时机

    在一个视图的生存期中,SwiftUI 可能会多次创建视图实例。由于惰性视图的优化机制,对于尚未处于可见区域的视图SwiftUI 不会创建其实例求值一个被显示的视图至少会经历一次的过程。...布局在计算好当前需要显示的视图所有的视图值后,SwiftUI 将进入到布局阶段。通过父视图视图提供建议尺寸,视图返回需求尺寸这一过程,最终计算出完整的布局结果。...:SwiftUI 首先对视图进行求值( 由外向内 )在全部求值结束后开始进行布局( 由父视图视图 )在布局结束后,调用视图对应的 onAppear 闭包( 顺序不明,不要假定 onAppear 之间的执行顺序...newWords 为空,但也不会有问题完成布局调用 onAppear 闭包, newWords 赋值由于 newWords 是该视图的 Source of truth ,发生改变后,导致视图重新刷新重复上面的过程...,此时 newWords 已经有值了,ForEach 将正常处理所有的视图总结在本文中,我们通过 SwiftUI 4 提供的新工具明确了 onAppear 的调用时机,或许这是新 API 开发时未曾想到的功能应用

    2.1K20

    WWDC - SwiftUI - 初恋般的感觉

    你可以通过Xcode新的实时反馈功能,来优化你的视图布局 。 第一节 创建一个使用SwiftUI的新Xcode项目。浏览画布、预览和SwiftUI模板代码。...第四步 把Hello World更改为Hello SwiftUI! 当你修改文案后,SwiftUI会自动更新视图。 ? 自定义Text View 你有两种方式来自定义TextView。...要自定义SwiftUI视图,你可以调用modifiers方法。Modifiers可以修改视图的属性,并且modifier返回一个新的视图,所以通常会将多个modifiers像链一样垂直堆叠在一起。...第七步 将边框颜色更改为白色。...把上面的控件组合成一个完成的详情界面 现在我们已经把所有控件定义实现好了。 利用我们现有的工具,我们可以把这些控件组合起来,形成完整的landmarks详情界面。 ?

    3.8K10

    为什么 SwiftUI 的修饰符顺序很重要

    每当我们将修饰符应用于 SwiftUI 视图时,我们实际上都会创建一个,应用了更改的新视图 —— 我们不仅仅是修改现有的视图。...如果你仔细想想,这种行为是有道理的 —— 我们的视图仅保留我们赋予它们的确切属性,因此,如果我们设置背景颜色或字体大小,则无处存储该数据。...如果思考一下修饰符的工作原理,您就可以了解为什么会如此:每个修饰符都会创建一个,应用了该修饰符的新结构体,而不是在视图上设置属性。 您可以通过查询视图主体的类型来窥视 SwiftUI 的底层。...如您所见,我们使用 ModifiedContent 类型堆叠——每个视图都需要一个视图进行转换以及要进行的实际更改,而不是直接修改视图。 这意味着修饰符的顺序很重要。...例如,SwiftUI 为我们提供了 padding() 修饰符,该修饰符在视图周围添加了一些空间,从而不会将其推到其他视图或屏幕边缘。

    2.3K20
    领券