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

当放入NavigationView (macOS应用程序)中时,SwiftUI @State只更新一次

当将NavigationView放入macOS应用程序中时,SwiftUI @State只会更新一次。

SwiftUI是苹果推出的一种用于构建用户界面的声明式框架。@State是SwiftUI中的一种属性包装器,用于声明一个可变的状态。当使用@State修饰的属性发生变化时,SwiftUI会自动更新相关的视图。

然而,在NavigationView中,@State属性只会在视图加载时更新一次。这是因为NavigationView在macOS应用程序中通常用于显示导航栏和导航链接,这些导航链接在导航栏中被点击时会导致整个视图层次结构的重新加载。

因此,如果将@State属性放在NavigationView中,它只会在视图加载时更新一次,而不会在导航链接被点击时更新。如果需要在导航链接被点击时更新@State属性,可以考虑将@State属性放在NavigationView中的子视图中,或者使用其他适合的属性包装器,如@Binding或@ObservableObject。

腾讯云提供了一系列云计算相关的产品,可以帮助开发者构建和部署各种应用。具体推荐的产品和产品介绍链接地址可以根据具体需求和场景进行选择。

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

相关·内容

SwiftUI 4.0 的全新导航系统

SwiftUI 4.0( iOS 16+ 、macOS 13+ )对导航系统作出了重大改变,提供了以视图堆栈为管理对象的新 API ,让开发者可以轻松实现编程式导航。本文将对新的导航系统作以介绍。...样式的做法,一分为二的方式将让布局表达更加清晰,同时也会强迫开发者为 SwiftUI 应用对 iPadOS 和 macOS 做更多的适配。...两个组件两种逻辑 相较于控件名称上的改变,编程式导航 API 才是本次更新的最大亮点。...", destination: SubView1(), tag: Target.subView1, selection: $selectedTarget) // SwiftUI 在进入当前视图,无论是否进入目标视图...} .navigationViewStyle(.stack) } } image-20220611110657857 为此,我之前不得已在 iPad 版本的应用程序

10.3K62
  • Ask Apple 2022 与 SwiftUI 有关的问答(上)

    如果你不想让父视图也被更新,可以在创建对象不使用 @StateObject 或 @ObservedObject 。...或者大多数应用程序只需要一个 WindowGroup ?A:多场景对于建立复杂的应用程序是很有用的,特别是在 macOS 上。...场景的内容视图定义了场景创建的窗口中的视图内容,但场景本身定义了应用程序的整体结构。SwiftUI 4.0 ,WindowGroup 获得了相当大的更新,真正具备了开发 macOS 应用的能力。...最近,我注意到 SwiftUI 视图的 onAppear 在意想不到的时间启动,比如 UITabBarController 被创建,而不是视图本身出现时。...2、视图出现在 UITabBarController ,推荐的执行代码的方法是什么?

    12.3K20

    从用SwiftUI搭建项目说起

    在UIKit我们的导航、标签都是通过控制器来管理,但是在SwiftUI他们分别是通过NavigationView+TabView管理的,我们得在认识上有一个基本的转变,从Controller到View...认识一下NavigationView,先看看下面的代码: NavigationView{ NavigationLink.init( destination...变量使用的,具体的我们会在后面的代码说的,关于这个@State我在项目Demo中有具体的解释,包括像@bind类型或者是@EnvironmentObject这些关键字我们肯定是得需要学习的,就像我们从...SwiftUI 将会把使用过 @State 修饰器的属性存储到一个特殊的内存区域,并且这个区域和 View struct 是隔离的.... @State 装饰过的属性发生了变化,SwiftUI 会根据新的属性值重新创建视图 */ @State private var selectedTab = 0 var

    4.5K20

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

    + NavigationLink 的界面跳转,在苹果给的 SwiftUI 的使用例子中就是这样写的,当然我们在正常的使用这样写也没啥问题,那我们界面跳转的问题是什么呢?...如果你看了我们 Demo的代码,你就知道我们是采用 TabView 嵌套 NavigationView 的形式,在这样的模式下似乎是存在问题的, 在 TabView+NavigationView 你利用...通过它我们可以避免在初始 View 创建 ObservableObject, 而是从环境获取 ObservableObject,像 @EnvironmentObject,@ObservedObject...3、再提一点关于上面说的滚动视图,在UIKit我们可以用UICollectionView搞定一切,但是在SwiftUI没有这个控件,我建议采用的方式是 ScrollView + HStack + VStack...之GeometryReader 理解SwiftUI关键字 State Binding ObservesOgiect EnvironmentObje SwiftUI 自定义实现旋转木马轮播效果

    12.1K20

    掌握 SwiftUI 的 Safe Area

    在 UIKit ,开发者需要利用 safeAreaInsets 或 safeAreaLayoutGuide ,才能确保将视图放置在界面的可见部分。 SwiftUI 对上述过程进行了彻底的简化。...SwiftUI 同时提供了一些方法和工具让开发者对安全区域有所控制。 本文将探讨如何在 SwiftUI 获取 SafeAreaInsets、将视图绘制到安全区域之外、修改视图的安全区域等内容。...视图尚未在屏幕上可见,该视图的 safeAreaInset 也为 0 。...在 SwiftUI ,开发者通常只有在需要获取 StatusBar + NavBar 的高度或 HomeIndeicator + TabBar 的高度才会使用到 safeAreaInsets 。...List(0..<100){ id in Text("id\(id)")} safeAreInsetList1 被嵌入到 TabView ,TabView 会调整其内部的安全区域。

    7.7K31

    架构之路 (五) —— VIPER架构模式(一)

    它包含在starter,因此您可以在本教程结束完成应用程序。 这个示例使用的是Pixabay,这是一个获得许可的照片共享站点。要将图像拉入应用程序,您需要创建一个免费帐户并获得一个API密钥。...您查看图表,您可以看到数据在视图view和实体entities之间流动的完整路径。 SwiftUI有自己独特的做事方式。...这就是干净体系结构的优点之一:您更改一个部分(比如持久层),它与代码的其他部分是隔离的。...它的值被分配给这个类自己的trips集合,创建一个链接,数据模型改变,保持presenter的trips更新。...您将其放置在NavigationView,该链接将成为一个按钮,将destination推送到导航堆栈上。 content块可以是任何一个SwiftUI视图。

    17.5K10

    SheetKit——SwiftUI模态视图扩展库

    开发SheetKit的主要原因: •便于Deep link的调用SwiftUI提供了onOpenURL方法让应用程序可以非常轻松的响应Deep Link。但在实际使用,情况并不如预期。...主要因为SwiftUI重要的视图展示模式:NavigationView、Sheet等都没有迅捷、简便的重置能力。很难通过一两句代码将应用程序立即设置成我们想要的视图状态。...•模态视图的集中管理SwiftUI通常采用.sheet来创建模态视图,对于简单的应用来说,这种形式非常直观,但如果应用程序的逻辑比较复杂、需要的模态视图众多,则上述方式就会让代码显得十分混乱,不易整理。...请参阅我之前的文章——在SwiftUI,根据需求弹出不同的Sheet[3]。•新的半高模态视图在WWDC 2021,苹果为大家带来了期待已久的半高模态视图。...interactiveDismissDisabled SwiftUI 3.0的interactiveDismissDisabled加强版,在通过代码控制是否允许手势取消的基础上,增加了当用户使用手势取消可以获得通知的能力

    2.9K20

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

    视图的性能优化Q:面对复杂的用户界面,控制视图中的更新范围的最佳做法是什么( 以避免不需要的转发以及重复计算 )。...在更复杂的 UI ,由于视图的更新速度过快,性能( 至少在 macOS 上 )迅速下降。A:有不同的策略。ObservableObject 是使视图或视图层次结构的失效( 引发重新计算 )的单元。...连锁动画Q:在 SwiftUI ,如何实现连锁动画?例如,我想先给一个视图做动画,动画完成后立即启动另一个动画。A:不幸的是,目前不可能实现连锁动画。...A:解决办法:保留 TextField ,但它不能被编辑,有条件地设置 disabled(true),它可以编辑使用 disabled(false) 。...但这个滚动有两大问题,1、是一个未公开的半成品,有可能会被从 SwiftUI 框架移除;2、不支持懒加载,即使和 Lazy 视图一起使用也会一次性加载全部的视图。

    14.8K30

    如何在 SwiftUI 熟练使用 sensoryFeedback 修饰符

    下面我们将学习如何使用 sensoryFeedback 修饰符在应用程序的不同操作中提供触觉反馈。...= nil { generator.selectionChanged() } } }}在 iOS 17 ,Apple 直接向 SwiftUI 添加了一系列感觉反馈的视图修饰符...在这里,我们在存储包含结果播放成功反馈,并在结果为空播放错误反馈。...触发器值更改时,反馈会播放。使用条件闭包触发如果要更灵活地控制何时触发反馈,请使用带有条件闭包版本的视图修饰符。...总结SwiftUI引入了新的sensoryFeedback视图修饰符,为所有Apple平台提供触觉反馈。通过简单的附加,我们可以定义反馈样式和触发器值,实现了在应用程序不同操作产生的触觉效果。

    13821

    SwiftUI-数据流

    数据处理的基本原则 Data Access as a Dependency:在 SwiftUI 数据一旦被使用就会成为视图的依赖,也就是说数据发生变化了,视图展示也会跟随变化,不会像 MVC 模式下那样要不停的同步数据和视图之间的状态变化...,数据源发生变化时会自动更新与该数据有依赖关系的视图。...从 @State 获取数据应用,并保持同步。...不过值类型在传递时会发生复制操作,所以给传递后的值类型即使属性更新了也不会触发最初的传过来的值类型的重新赋值,所以界面并不会刷新,此时需要用@Binding,因为它可以将值类型转为引用类型,这样在传递...使用@EnvironmentObject,SwiftUI 将立即在环境搜索正确类型的对象。如果找不到这样的对象,则应用程序将立即崩溃。

    10.2K20

    打造可适配多平台的 SwiftUI 应用

    SwiftUI 通过设定了某些兼容性的限制,促使开发者在做多平台适配,不得不考虑平台特点的不同,并根据这些不同来做有针对性的调整。...例如,在准备开始适配“电影猎手”的 macOS 版本(已完成 iPad 版本的适配),添加好 macOS 的 destination 并进行编译后,你会发现 Xcode 出现了不少类似下面这种错误:...由于 iPhone 支持单窗口模式,通常我们不会太注意它的存在,但在 iPadOS 以及 macOS 这些支持多窗口的系统,则代表着,每次创建一个新窗口(在 macOS ,通过菜单的新建来创建新窗口...一个场景被创建后,通过 onAppear 里的代码,在 App State 创建属于它自己的 State 数据,并在场景被删除,通过 onDisappear 里的代码,将当前场景的 State 清除掉...最后,我们来谈谈在将“电影猎手”适配到 macOS ,碰到的另外一个与数据源有关的问题。

    3.2K80

    打造可适配多平台的 SwiftUI 应用

    SwiftUI 通过设定了某些兼容性的限制,促使开发者在做多平台适配,不得不考虑平台特点的不同,并根据这些不同来做有针对性的调整。...例如,在准备开始适配“电影猎手”的 macOS 版本(已完成 iPad 版本的适配),添加好 macOS 的 destination 并进行编译后,你会发现 Xcode 出现了不少类似下面这种错误:...由于 iPhone 支持单窗口模式,通常我们不会太注意它的存在,但在 iPadOS 以及 macOS 这些支持多窗口的系统,则代表着,每次创建一个新窗口(在 macOS ,通过菜单的新建来创建新窗口...一个场景被创建后,通过 onAppear 里的代码,在 App State 创建属于它自己的 State 数据,并在场景被删除,通过 onDisappear 里的代码,将当前场景的 State 清除掉...最后,我们来谈谈在将“电影猎手”适配到 macOS ,碰到的另外一个与数据源有关的问题。

    2.1K10

    SwiftUI 与 Core Data —— 安全地响应数据

    由于在 Core Data 模版代码使用了一行代码来声明次级视图:Text("Item at \(item.timestamp!...在上节的演示数据被删除后( 通过 onAppear 闭包的延迟操作 ),NavigationView 会自动返回到根视图中。在这种情况下,持有该数据的视图将伴随着数据删除一并消失。...此时,数据被删除后,应用并不会自动退回至根视图。另外,在其他的一些操作,为了保证模态视图的稳定,我们通常也会将模态视图挂载到 List 的外面。例如:@State var item: Item?... timestamp 为 nil ,将显示当前时间 Text("\((item.timestamp ??...为了演示方便,仍以普通的 SwiftUI 数据流举例:@State var item: ItemValue?

    3.3K20

    干货 | 关于SwiftUI,看这一篇就够了

    但是,在SwiftUI里面,视图中声明的任何状态、内容和布局,源头一旦发生改变,会自动更新视图,因此,只需要一次布局。在属性前面加上@State关键词,即可实现每次数据改动,UI动态更新的效果。...也就是说,声明一个属性SwiftUI会将当前属性的状态与对应视图的绑定,当属性的状态发生改变的时候,当前视图会销毁以前的状态并及时更新,下面具体分析一下这个过程。...用户交互过程,会产生一个用户的action,从上图可以看出,在SwiftUI数据的流转过程如下: 该行为触发数据改变,并通过@State数据源进行包装; @State检测到数据变化,触发视图重绘;...SwiftUI内部按上述所说的逻辑,判断对应视图是否需要更新UI,最终再次呈现给用户,等待交互; 以上就是SwiftUI的交互流程,其每一个节点之间的数据流转都是单向、独立的,无论应用程序的逻辑变得多么复杂...因为,在 SwiftUI这些属性的设置在内部都会用一个View来承载,然后在布局的时候就会按照上面示例的布局流程,一层层View的计算布局下来,这样做的优点是:方便底层在设计渲染函数更容易做到monomorphic

    9.1K11
    领券