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

如何在SwiftUI中保存和恢复HSplitview位置

在SwiftUI中保存和恢复HSplitView的位置,可以通过使用UserDefaults来实现。

首先,我们需要定义一个遵循ObservableObject协议的ViewModel,用于保存和管理HSplitView的位置信息。在ViewModel中,我们可以使用UserDefaults来存储和读取位置信息。

代码语言:txt
复制
import SwiftUI

class SplitViewPositionViewModel: ObservableObject {
    @Published var splitViewPosition: CGFloat {
        didSet {
            UserDefaults.standard.set(splitViewPosition, forKey: "SplitViewPosition")
        }
    }
    
    init() {
        splitViewPosition = UserDefaults.standard.object(forKey: "SplitViewPosition") as? CGFloat ?? 0.5
    }
}

在上述代码中,我们使用UserDefaults来存储和读取splitViewPosition属性的值。在属性的didSet方法中,每当splitViewPosition的值发生变化时,都会将其存储到UserDefaults中。

接下来,我们可以在SwiftUI的View中使用这个ViewModel来保存和恢复HSplitView的位置。

代码语言:txt
复制
import SwiftUI

struct ContentView: View {
    @StateObject private var viewModel = SplitViewPositionViewModel()
    
    var body: some View {
        NavigationView {
            HSplitView {
                // 左侧视图
                Text("Left View")
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                
                // 右侧视图
                Text("Right View")
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .splitViewDividerThickness(10)
            .splitViewDividerStyle(.thin)
            .splitViewPosition($viewModel.splitViewPosition)
        }
    }
}

在上述代码中,我们使用@StateObject来创建一个SplitViewPositionViewModel的实例,并将其保存在ContentView的状态中。然后,我们在HSplitView中使用splitViewPosition属性来保存和恢复HSplitView的位置。

最后,我们可以在SceneDelegate中设置ContentView作为应用程序的根视图。

代码语言:txt
复制
import SwiftUI

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
    
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: ContentView())
            self.window = window
            window.makeKeyAndVisible()
        }
    }
}

通过以上步骤,我们就可以在SwiftUI中保存和恢复HSplitView的位置了。每当用户调整HSplitView的位置时,位置信息将会被保存到UserDefaults中。下次应用程序启动时,位置信息将会被读取并应用到HSplitView上,实现位置的恢复。

推荐的腾讯云相关产品:腾讯云云服务器(CVM),腾讯云对象存储(COS)。

腾讯云云服务器(CVM):提供弹性、安全、稳定的云服务器,可满足各类应用的需求。详情请参考腾讯云云服务器

腾讯云对象存储(COS):提供高可靠、低成本的对象存储服务,可用于存储和处理各类非结构化数据。详情请参考腾讯云对象存储

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

相关·内容

何在Linux挂起恢复进程?

在Linux操作系统,挂起恢复进程是一种管理控制运行中进程的重要操作。挂起进程将其置于休眠状态,而恢复进程则重新激活它们以继续执行。...本文将详细介绍如何在Linux挂起恢复进程,包括使用常见的命令工具进行操作。挂起进程在Linux,可以使用kill命令特定的信号来挂起进程。...以下是在Linux恢复进程的步骤:首先,需要获取要恢复进程的进程ID(PID)。可以使用ps命令或pgrep命令来查找进程ID,就像在挂起进程时一样。...使用工具挂起恢复进程除了使用kill命令外,Linux还提供了其他一些工具方法来挂起恢复进程。下面介绍两个常用的工具:1. killall命令killall命令用于根据进程名称挂起或终止进程。...通过掌握这些操作,您可以更好地管理调试运行的进程,并优化系统资源的使用。

2.6K40

SwiftUI 实战使用 MapKit API

前言SwiftUI 与 MapKit 的集成在今年发生了重大变化。在之前的 SwiftUI 版本,我们将 MKMapView 的基本功能封装到名为 Map 的 SwiftUI 视图中。...幸运的是,事情发生了变化,SwiftUI 引入了与 MapKit 集成的新 API。本篇文章我们将学习如何在 SwiftUI 的最新版本中使用可用的新功能丰富的 API 与 MapKit 集成。...正如我之前所说,在 SwiftUI 框架的早期版本,我们有一个 Map 视图,为我们提供了 MapKit 的基本功能,该功能现在已被弃用。...在我们的示例,我们使用了 Marker Annotation 类型。Marker 是一个基本项,允许我们在地图上放置预定义的标记。...MapInteractionModes 类型定义了一组交互,平移、俯仰、旋转缩放。默认情况下,它启用所有可用的交互类型。总结今天,我们学习了在 SwiftUI 中集成 MapKit 的基础知识。

10400

何在Xcode下预览含有Core Data元素的SwiftUI视图

何在Xcode下预览含有Core Data元素的SwiftUI视图 从SwiftUI诞生之日起,预览(Canvas Preview )一直是个让开发者又爱又恨的功能。...结合两年来我在SwiftUI中使用Core Data的经验教训,我们将在本文中探讨: •导致SwiftUI预览崩溃的部分原因•如何在之后的开发避免类似的崩溃出现•如何在Xcode安全可靠地预览含有...在重启应用或重启预览后,数据会恢复成Bundle的原始数据集(有时在预览模式下数据不会立即复原,需在几次动态模式切换后才会恢复)。...不过由于Bundle是只读的,你在动态预览修改创建的数据并不会被真正的持久化。如果确有持久化的需要,可以使用下面的方案。将Bundle的数据库文件保存到Catch目录。...+Core Data使用,痛苦快乐始终相伴而行。

5.1K10

SwiftUI TextField进阶——格式与校验

SwiftUI在封装也屏蔽了不少的高级接口功能,增加了开发者实现某些特定需要的复杂性。...如何在TextField实现格式化显示 现有格式化方法 在SwiftUI 3.0,TextField新增了使用新老两种Formatter的构造方法。...如何在TextField屏蔽无效字符 现有屏蔽字符方法 在SwiftUI,可以通过设置仅使用特定的键盘类型来实现一定程度上的录入限制。...如何在TextField检查内容是否符合指定条件 相较上述两个目标,在SwiftUI检查TextField内容是否符合指定条件是相当方便的。...不利于判断用户是否录入新的信息(更多的信息可参阅如何在SwiftUI创建一个实时响应的Form[10])。方案二允许不提供初始值,支持可选值。

8.1K20

SwiftUI 下定制手势

本文将通过几个示例,演示如何使用 SwiftUI 提供的原生手段定制所需手势。 基础 预置手势 SwiftUI 目前提供了 5 种预置手势,分别为点击、长按、拖拽、缩放旋转。...•拖拽(DragGesture)SwiftUI 将 Pan Swipe 合二为一,位置变化时,提供拖动数据。•缩放(MagnificationGesture)两指缩放。...使用 GestureState 保存点击开始的时间,按压结束后,上次按压的起始时间会被手势自动清除。...需自行编写 State 的数据恢复代码•由于使用了 State 替换 GestureState,逻辑判断就可以从 updating 移动到 onChanged 示例三:附带位置信息的点击 3.1 目标...使用 simultaneously 将两种手势联合起来,从 DrageGesture 获取位置数据,从 TapGesture 退出。

2.7K20

SwiftUI Release 引入的辅助焦点管理

这个新功能使得在SwiftUI处理辅助技术( VoiceOver Switch Control)的焦点状态变得更加轻松。...本文将介绍如何使用 @FocusState 属性包装器来在SwiftUI管理移动辅助焦点。...SwiftUI 默认使用 false 值初始化该变量,因为用户可以聚焦屏幕的任何其他区域。我们还使用 focused 视图修饰符将特定视图的焦点状态绑定到保存其值的变量。...总结在这篇文章,我们深入探讨了 SwiftUI Release 引入的辅助焦点管理功能,使得处理辅助技术( VoiceOver Switch Control)的焦点状态变得更加轻松。...通过详细的示例代码,我们演示了如何在 SwiftUI 中使用 @FocusState,以及如何通过 focused 视图修饰符将焦点状态绑定到特定的视图。

10910

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

阅读 SwiftUI 的动画机制[8] 一文,了解更多有关动画的内容。自适应高度 SheetQ:如何在 iOS16 呈现与动态内容高度相匹配的 Sheet?...阅读 SwiftUI 4.0 的全新导航系统[13] ,了解它们之间的不同。位置偏移的方法与效率Q:在非线性位置( 有 2 个轴 )渲染带有圆形图像最好方法是什么?...如果发生这种情况,克服这种情况的技术是在外部存储上保存一些数据,只在内存中保留最相关的数据一个标识符,以便能够完全取回其余的数据。...目前我的做法是在一个单例中保存对子上下文托管对象的引用,然后用一个 URL 打开一个新窗口,这个 URL 在单例检查上下文托管对象。如果我们能用自定义参数启动新窗口,那就更好了。...image-20221022135326560San Francisco 宽度风格Q:如何在 SwiftUI 如何使用 SF 字体家族新增的三种宽度风格( Compressed、Condensed、Expanded

12.2K20

何在SwiftUI实现interactiveDismissDisabled

何在SwiftUI实现interactiveDismissDisabled 想获得更好的阅读体验,可以访问我的博客www.fatbobman.com[1] 本文中我们将探讨如何实现一个SwiftUI...Sheet将被阻止,用户需明确选择保存或丢弃数据。...在WWDC 2021 观后感[6]一文,我们已经探讨过SwiftUI3.0将会影响非常多的第三方开发者编写SwiftUI扩展的思路实现方式。...在之前的版本[8],用户使用手势取消时的通知其他的逻辑是分离的,在使用不仅繁琐,而且影响代码的观感。本次将一并解决这个问题。...通过学习理解原生的API,可以让我们的实现更加符合SwiftUI的风格,整体的代码更加的统一。 希望本文能够对你有所帮助。

3.8K40

SwiftUI 创建一个环形 Slider

SwiftUI ,它通常呈现为直线上的拇指选择器。有时将这种类型的选择器呈现为一个圆圈,拇指绕着圆周移动可能会更好。本文介绍如何在 SwiftUI 定义一个环形的 Slider。...有关默认 Slider 的更多信息,可以参阅 如何在 SwiftUI 自定义 Slider 自定义外观的内容。 初始化环形轮廓 从ZStack的三个圆环开始。...一个灰色的圆环代表滑块的路径轮廓,一个淡红色的圆弧代表沿着圆环的进度,一个圆圈代表当前光标或拇指的位置。将滑块的范围设置为0.0到1.0,并硬编码一个直径一个的当前位置进度 - 0.33。...可以看到 x y 坐标围绕包含环形 Slider 的位置中心的变化情况。...应该只有一个属性来保存滑块进度。视图被提取到一个单独的结构,该结构具有圆形滑块上进度的一个绑定值。 滑块的range的可选参数也是可用的。

3.6K30

SwiftUI 状态管理系统指南

前言 SwiftUI与苹果之前的UI框架的区别不仅仅在于如何定义视图其他UI组件,还在于如何在整个使用它的应用程序管理视图层级的状态。...属性状态 由于SwiftUI主要是一个UI框架(尽管它也开始获得用于定义更高层次结构(应用程序场景)的API),其声明式设计不一定需要影响应用程序的整个模型和数据层——而只是直接绑定到我们各种视图的状态...观察对象 StateBingding的共同点是,它们处理的是在SwiftUI视图层次结构本身管理的值。...标记为StateObject的属性与ObservedObject的行为完全相同——此外,SwiftUI将确保存储在此类属性的任何对象不会因为框架在重新渲染视图时重新创建新实例而被意外释放: struct...小结 SwiftUI管理状态的方式绝对是该框架最有趣的方面之一,它可能需要我们稍微重新思考数据在应用的传递方式——至少在涉及到将被我们的UI直接消费修改的数据时是这样。

5.1K20

在 iOS 16 中用 SwiftUI Charts 创建一个折线图

此外,自定义图表的外观感觉以及使图表的信息易于访问也是非常容易的。 如以前的文章所示,不使用 SwiftUI Charts 也可以创建一个折线图。...系列文章 如何在 SwiftUI 创建条形图 SwiftUI 的水平条形图 在 iOS16 中用 SwiftUI 图表定制一个线图 在 Swift 图表中使用 Foudation 库的测量类型 简单折线图...定义一个结构来保存日期该日的步数,并为当前周创建一个数组。...然后为图表的每个标记添加可访问性标签值。...图表带有两个系列的步数数据的折线图 SwiftUI 图表带有两个系列的步数数据的折线图 结论 在 SwiftUI Charts 还有很多东西可以探索。

3.6K20

掌握 Transaction,实现 SwiftUI 动画的精准控制

本文将通过探讨 Transaction 的原理、作用、创建和分发逻辑等内容,告诉读者如何在 SwiftUI 实现更加精准的动画控制,以及需要注意的其他问题。...所谓的“显式动画”“隐式动画”的核心区别在于生成 transaction 派发 transaction 的位置逻辑不同。 transaction 只与当前的状态变化有关。...因此,在接下来的内容,我们将更详细地介绍阐述 transaction 的细节实现,帮助你更好地理解。...新的隐式动画声明方式在 WWDC 2023 中被宣布 在 WWDC 2023 ,苹果为 SwiftUI 增加了新的 animation transaction 版本。...使用显式动画屏蔽系统组件动画 在 iOS 17 SwiftUI 会让大多数系统组件( Sheet、FullScreeCover、NavigationStack、Inspector 等)在实现动画时

46620

肘子的 Swift 周报 #022 | 忙碌的一周

(据悉将很快恢复)。...在这众多更新,对开发者而言最重大的莫过于 Swift 5.10 的发布。并发模型最早在 Swift 5.5 版本引入,包括了 async/await、actor 结构化并发等特性。...可能很快,社交媒体上就会充斥着关于 Xcode 各种错误警告的截图。希望大家能以平和的心态面对这个或许“痛苦”的转变过程,毕竟这是向前迈进、提升代码质量应用稳定性的必经之路。...这一理念主张充分利用 SwiftUI 所提供的工具与特性,例如 @State @Environment,而不是将其硬套在传统的架构模式上。...Migrating my SwiftUI App to VisionOS in 2 Hours[16] Cihat Gündüz[17] 在这篇文章里,Cihat Gündüz 详细讲述了他如何在两小时内

10110

@State 研究

@State 研究 想获得更好的阅读体验,可以访问我的博客 www.fatbobman.com。...本文试图探讨并分析SwiftUI @State的实现方式运行特征;最后提供了一个有关扩展@State功能的思路及例程。读者需要对SwiftUI的响应式编程有基本概念。...研究的意义何在 我在去年底使用了SwiftUI写了第一个 iOS app 健康笔记,这是我第一次接触响应式编程概念。在有了些基本的认识尝试后,深深的被这种编程的思路所打动。...通过一段时间的研究分析,我打算用两篇文章来阐述这方面的问题,并尝试提供一个现阶段的使用思路。 数据(状态)驱动 在SwiftUI,视图是由数据(状态)驱动的。...如何在满足单一数据源的情况下最大限度享受SwiftUI的优化便利?我将在下一篇文章中进行进一步探讨。

2.9K20

Swift 周报 第十二期

以上调整生效后,在“我的 App”“价格与销售范围”部分会随即更新。您可以随时在 App Store Connect 更改您的 App App 内购买项目的价格 (包括自动续期订阅)。...联邦法院随后恢复了此案,美国地方法院法官威廉·阿尔苏普去年表示,他计划对原告作出简易判决,并下令对损害赔偿进行审判。 8 月 13 日,阿尔苏普在集体诉讼批准了和解协议。...如何在 SwiftUI 创建条形图[15] 摘要: 本文展示了如何创建一个垂直条形图,其中 Y 轴表示每个类型的值。...如下图: 如何在 SwiftUI 创建水平条形图[16] 摘要: 根据 UI 设计以及交互需求,有时候统计图需要调整 X Y 轴。...-16/ [15]如何在 SwiftUI 创建条形图: https://swdevnotes.com/swift/2021/how-to-create-bar-chart-swiftui/ [16]货拉拉

2.6K10

SwiftUI 布局 —— 尺寸( 上 )

本文将从布局的角度入手,为你揭开盖在 SwiftUI 尺寸概念上面纱,了解并掌握 SwiftUI 众多尺寸的含义与用法;并通过创建符合 Layout 协议的 frame fixedSize 视图修饰器的复制品...这并非意味着尺寸在 SwiftUI 不重要,事实恰恰相反,正是由于在 SwiftUI 尺寸是一个十分复杂的概念,苹果将绝大多数有关尺寸的配置表述都隐藏到了引擎盖之下,刻意对其进行了包装与淡化。...在 Layout 协议,对应的是 sizeThatFits 方法。经过该阶段的协商,SwiftUI 将确定视图所在屏幕上的位置尺寸。...第二阶段 —— 安置子民 在该阶段,父视图将根据 SwiftUI 布局系统提供的屏幕区域( 由第一阶段计算得出 )为子视图设置渲染的位置尺寸( 上方的 5-6 )。...我们对 SwiftUI 的各种尺寸概念做了介绍,在下篇我们将通过创建 frame、fixedSize 的复制品进一步提升大家对 SwiftUI 不同尺寸概念的理解掌握。

4.7K20

SwiftUI 的动画机制

SwiftUI ,我们不能命令某个视图从一个位置移动到另一个位置,为了实现上述效果,我们需要声明该视图在状态 A 时所处的位置以及状态 B 时所处的位置,当由状态由 A 转到 B 时,SwiftUI...同所有 SwiftUI 的视图修饰符一样,在代码中所处的位置决定了修饰符的作用对象范围。 animation 的作用对象仅限于它所在视图层次及该层次的子节点。 上面两段代码没有对错之分。...只会使用与可动画部件位置最近的关联(时序曲线函数依赖)声明。...比如,在出场动画进行时,将状态 show 恢复成 true ,SwiftUI 将会保留当前的分支状态(不会重新创建视图,参见本文附带的范例)。...100 : 0) // 同一视图两种状态声明 代码一描述了在依赖项 show 发生变化时,SwiftUI 将在分支一分支二进行切换。

14.7K40

Ask Apple 2022 与 Core Data 有关的问答

在这些情况下,应进入恢复步骤以使应用程序再次处于可用状态。另一种方法是向用户显示 UI 存在问题并且需要进行重置。...NSPersistentCloudKitContainer CloudKit 可以支持比某些限制(设备存储)多两个数量级的数据。...在我的设置,存储被保存到一个应用程序组目录,以允许从应用程序扩展程序访问,所以我认为每个进程都将利用各自的容器来访问它。...阅读 Core Data 是如何在 SQLite 中保存数据的[14] 一文,了解更多有关 Core Data 元数据的内容。...是否有必要同步中间数据Q:当我使用 Core Data with CloudKit 时,快速保存数千个 GPS 位置的最佳方法是什么?当数据很多时,它会达到服务器极限。冗长的讨论。

2.8K20

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

开始 首先看下主要内容: 在本教程,您将了解如何在SwiftUICombine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行的iOS应用程序,来自翻译。...VIPER为这种情况提供了一种替代方案,可以与SwiftUICombine结合使用,帮助构建具有清晰架构的应用程序,该架构有效地分离了所需的不同功能职责,如用户界面、业务逻辑、数据存储网络。...在此过程,您还将了解您的iOS项目中的SwiftUICombine。 打开启动项目。这包括一些代码,让你开始: 当你构建其他视图时,ContentView会启动它们。...在Entities组,您将看到与数据模型相关的类。TripWaypoint稍后将作为VIPER架构的Entities。因此,它们只保存数据,不包含任何功能逻辑。...在Data Sources组,有用于保存或加载数据的辅助函数。 如果您喜欢在WaypointModule组查看前面的内容。它有一个Waypoint编辑屏幕的VIPER实现。

17.4K10
领券