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

SwiftUI滚动视图部分显示Mac应用程序中的最后一项

SwiftUI是一种用于构建用户界面的现代化框架,它可以用于开发Mac、iOS、watchOS和tvOS应用程序。在Mac应用程序中,如果想要滚动视图部分显示最后一项,可以使用ScrollView和LazyVStack结合使用来实现。

ScrollView是一个容器视图,它可以在垂直方向上滚动其子视图。LazyVStack是一种垂直布局视图,它只会在需要时才会创建和加载子视图,这样可以提高性能。

以下是实现滚动视图部分显示最后一项的示例代码:

代码语言:txt
复制
import SwiftUI

struct ContentView: View {
    let items = Array(1...100)

    var body: some View {
        ScrollView {
            LazyVStack {
                ForEach(items, id: \.self) { item in
                    Text("Item \(item)")
                        .frame(maxWidth: .infinity)
                }
            }
        }
        .onAppear {
            // 滚动到最后一项
            let lastItem = items.count - 1
            let lastItemRect = CGRect(x: 0, y: CGFloat(lastItem) * 44, width: 1, height: 1)
            DispatchQueue.main.async {
                NSApp.windows.first?.contentView?.scroll(lastItemRect)
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在这个示例中,我们创建了一个包含100个项目的数组。然后,我们使用ScrollView和LazyVStack来显示这些项目的文本视图。在视图的onAppear回调中,我们使用NSApp.windows.first?.contentView?.scroll方法将滚动位置设置为最后一项。

这样,当应用程序加载时,滚动视图将自动滚动到最后一项,从而实现了滚动视图部分显示最后一项的效果。

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

腾讯云云服务器(CVM)是一种弹性计算服务,提供可扩展的云服务器实例,可满足不同规模和需求的应用程序。您可以根据实际需求选择适当的云服务器配置,并根据业务需求进行弹性调整。

腾讯云对象存储(COS)是一种安全、高可靠、低成本的云存储服务,适用于存储和处理各种类型的数据,包括文本、图片、音频、视频等。它提供了简单易用的API接口和丰富的功能,可以满足不同应用场景的需求。

您可以通过以下链接了解更多关于腾讯云云服务器(CVM)和腾讯云对象存储(COS)的详细信息:

腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos

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

相关·内容

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

因此,如果你正在创建一个视图显示滚动内容,并可能进行选择操作,那么在 iOS 和 macOS 上使用 List 将有最好体验。...macOS APIQ:对于运行 Monterey Mac,能否如何在 SwiftUI 实现下面需求建议:打开一个窗口在该窗口中初始化数据找到所有打开窗口确定一个窗口是否打开从不在该窗口视图中关闭一个窗口...Too complex to type checkQ:我在 iOS 14 SwiftUI 遇到一个问题,我试图有条件地显示 3 个符合 Shape 协议对象一个。...在 SwiftUI ,有一个从第一版开始就存在但尚未公开SwiftUI 实现滚动容器 —— _ScrollView 。...但这个滚动有两大问题,1、是一个未公开半成品,有可能会被从 SwiftUI 框架移除;2、不支持懒加载,即使和 Lazy 视图一起使用也会一次性加载全部视图

14.7K30

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

虽然你也可以使用UIKit来构建你应用程序部分,但你需要使用SwiftUI来实现许多平台独有的功能。 为visionOS开发软件需要一台带有苹果芯片Mac。...在任何SwiftUI应用,你都可以使用场景将内容放到屏幕上。场景包含要在屏幕上显示视图和控件。场景还定义了这些视图和控件出现在屏幕上时外观。...在visionOS,您可以在同一个场景包含2D和3D视图,并且可以将这些视图呈现在窗口中或作为人周围环境部分。...在页面链接增加传统2D窗口深度 Windows是应用程序界面的重要组成部分。...当你准备在界面显示3D内容时,使用RealityView。这个SwiftUI视图作为你RealityKit内容容器,并允许你使用熟悉SwiftUI技术更新内容。

71440

解析 SwiftUI 两处由状态更新滞后引发严重 Bug

众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示时,应直接对状态进行修改。...这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及在滚动返回上层视图时导致应用崩溃。...原文发表在我博客 肘子Swift记事本视图变化在前、状态变化在后在 SwiftUI ,某些可编程控件在执行一定操作时,会先更新视图,待视图变化完成后再修改与其对应状态。...请至少进入第三级视图滚动当前视图视图处于滚动状态时,点击 NavigationStack 左上角 “Back” 按钮。...由于在返回上层视图时,状态尚未更新,因此在清理 AG 时(返回动画运行),会破坏应用程序 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。

590110

AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架视频流App构建

构建并运行该项目,您将看到一个应用程序,该应用程序已经设置了一个充满潜在视频表格,供您观看。 您目标是在用户点击其中一个单元格时显示视频播放器。 1....3) VideoPlayer 是一个方便 SwiftUI 视图,需要播放器对象才能发挥作用。 您可以使用它来播放视频。 4) 默认情况下,SwiftUI 视图考虑设备安全区域。...3) 最后,您使用 insert(_:after:) 将每个项目添加到队列。...play() 默认情况下,这会将您循环剪辑显示设置为自动播放和音频关闭。 构建并运行以查看您完整工作剪辑节目! 不幸是,当最后一个剪辑播放完毕后,视频播放器会变黑。 3....缺点是,在撰写本文时,iOS 14.5是可用最新版本,VideoPlayer SwiftUI 视图显示画中画按钮。

6.9K10

深入了解 SwiftUI 5 ScrollView 新功能

当 scrollClipDisable 为 false 时,滚动内容会被裁剪以适应滚动容器边界。任何超出边界部分将不会显示。...它只影响滚动视图初始状态,一次性设置。通常用于实现类似初始状态从底部显示 IM 应用、从 trailing 开始显示数据等情况。通过 UnitPoint 可以同时设置两个轴向初始位置。...可采用 优化在 SwiftUI List 显示大数据集响应效率[5] 一文中介绍方式来解决。 scrollPostion(id:) 使用此修饰符可以让滚动视图滚动到特定位置。...(视图标识) 不支持锚点设定,固定锚点为子视图 center 正如 优化在 SwiftUI List 显示大数据集响应效率[6] 一文所提到,当数据集很大时,也会出现性能问题。....automatic 是默认行为,在紧凑水平尺寸类受限,否则不受限。 .always 始终限制可滚动视图数量。 .never 不限制可滚动视图数量。

68420

我庆幸果断放弃了SwiftUI:它还不够成熟

这些年,也有一些用 SwiftUI 重写 UIKit 应用程序案例,去年奈飞新版 iOS App 登录界面也完全由 SwiftUI 重构。...这是一项很好技术,响应式方法非常适合许多典型基于视图需求,但对如何处理边缘情况,文档中非常缺乏相关说明。” “这是个好主意,但 SwiftUI 主要问题是完全不成熟。”...但每当 SwiftUI 更新检查器视图时(这种更新可能出现在移动过程,甚至是在输入文本字段时候),渲染速率都会下降到每秒 10 到 15 帧,而且相当不稳定。这显然让人无法容忍。...但上图展示效果其实是在 AppKit 完成,因为我在 SwiftUI 一直实现不了预期功能。大家应该注意到了,中间 SpriteKit 视图上有三个按钮(分别是 +、200% 和 -)。...这可以说是压死骆驼最后一根稻草了,我决定放弃 SwiftUI,继续用 AppKit。 总    结 其实没能在项目中用到 SwiftUI,会让我感觉有点遗憾。

4.9K20

解析 SwiftUI 两处由状态更新滞后引发严重 Bug

众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示时,应直接对状态进行修改。...这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及在滚动返回上层视图时导致应用崩溃。...视图变化在前、状态变化在后 在 SwiftUI ,某些可编程控件在执行一定操作时,会先更新视图,待视图变化完成后再修改与其对应状态。这些控件基本上都是对 UIkit(AppKit)二次包装。...请至少进入第三级视图 滚动当前视图视图处于滚动状态时,点击 NavigationStack 左上角 “Back” 按钮。...由于在返回上层视图时,状态尚未更新,因此在清理 AG 时(返回动画运行),会破坏应用程序 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。

26720

在 Text 实现基于关键字搜索和定位

View 添加显式标识符后( 使用 id 修饰器),在视图刷新时,List 将会为 ForEach 所有视图创建实例( 并非渲染 )用以比对视图类型构造参数是否发生变化,但仍然只会渲染屏幕上显示部分...请阅读 优化在 SwiftUI List 显示大数据集响应效率[6] 以及 避免 SwiftUI 视图重复计算[7] 两篇文章,了解更多有关性能优化方面的内容通过 currentPostion 获取需要滚动...transcription 结果值已经为高亮显示值( 当前选择高亮位置 ),且下一个序号位置仍在同一个 transcription ,那么将放弃滚动。...了解更多内容,请阅读 SwiftUI 视图生命周期研究[9] 一文优先定位于最靠近屏幕中央搜索结果:/// 从 List 当前显示 transcription 中就近选择 match positionprivate...尽管仅在搜索和 TranscriptionRow 视图注入两处对性能做了部分优化,但最终流畅度已基本满足需求,也从侧面证明了 SwiftUI 具备了相当实战能力。

4.2K30

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

NavigationView + NavigationLink 界面跳转,在苹果给 SwiftUI 使用例子中就是这样写,当然我们在正常使用这样写也没啥问题,那我们界面跳转问题是什么呢?...GeometryReader 主要作用就是能够获取到父View建议尺寸,这就是它主要作用,要没有它我们面临可能就是无休止传值了,SwiftUI 既然是声明式UI,按我理解你就没有办法去获取某一个视图视图之类...有一个还得说明一下,GeometryReader 改变了它显示内容方式。在 iOS 13.5 ,内容放置方式为 .center。在 iOS 14.0 则为:.topLeading。...3、再提一点关于上面说滚动视图,在UIKit我们可以用UICollectionView搞定一切,但是在SwiftUI没有这个控件,我建议采用方式是 ScrollView + HStack + VStack...= .zero /// 当前显示位置索引, /// 这是实际数据1就是数据没有被处理之前0位置图片 /// 所以这里默认从1开始 @State var currentIndex

11.8K20

掌握 ViewThatFits

在 iOS 16 SwiftUI 增加了一个新自适应布局容器 ViewThatFits。正如其名称所示,它作用是在给定多个视图中找出最合适视图并使用。...如果在所有设置受限轴上,理想尺寸都小于等于建议尺寸,那么选择该子视图,并停止对后续子视图进行判断。 如果所有的子视图都不满足条件,则选择闭包最后一个子视图。...ScrollView:如果理想状态轴与滚动方向一致,则在滚动方向上一次性展示所有的子视图而无视父视图建议尺寸。 VStack、HStack、ZStack:所有子视图在理想状态下整体呈现。...在 SwiftUI ,我们可以通过 frame 来修改视图在理想状态下呈现。...总结 正如我们所看到,ViewThatFits 是 SwiftUI 工具箱一个强大而灵活组件,它可以帮助开发者优雅地解决多种布局挑战,提升应用程序用户体验和界面适应性。

15810

SwiftUI 内容边距

不幸是,我们在 SwiftUI 无法访问 readableContentGuide。...但是它将滚动条保留在视图后导边缘。contentMargins 视图修饰符接受几个参数,允许我们调整其行为。第一个参数是我们想要移动边缘。...你可以在 Playground 运行此代码以查看结果。总结本文介绍了 SwiftUI 内容边距管理,通过对比安全区域概念,解释了内容边距重要性。...随后,通过介绍 UIKit readableContentGuide 布局指南以及 SwiftUI safeAreaPadding 视图修饰符,展示了在 iPad 上适配内容边距方法。...最后,引入了 contentMargins 视图修饰符,并详细解释了其用法和参数,以及如何使用它来管理内容边距。通过本文,读者可以更好地理解并掌握 SwiftUI 内容边距管理技巧。

10910

用 Table 在 SwiftUI 下创建表格

例如:标题行与数据行( 首行 )重叠;标题行第一列不显示滚动不顺畅以及某些表现( 行高 )与 macOS 版本不一致等情况。...,更习惯于将数据元素以行( Row )形式进行展示( 在一行显示数据不同属性内容 ) 在 Table 数据是懒加载,行视图( TableColumn ) onAppear 和 onDisappear...与 List 一样,Table 内置了纵向滚动支持。在 macOS 上,如果 Table 内容( 行宽度 )超过了 Table 宽度,Table 将自动开启横向滚动支持。...如果你在 Xcode 编写使用 Table 代码,大概率会碰到自动提示无法工作情况。甚至还会出现应用程序无法编译,但没有明确错误提示( 错误发生在 Table 内部)。...上下文菜单、选择 ) List( Grid GridRow 并非真正意义上行 ) 需要视图可渲染( 保存成图片 ) LazyVGrid、Grid 可固定标题行 List、LazyVGrid、Grid

3.9K30

iOS14 致敬 Android 之 Meet Widget

在你应用添加 Widget 将 Widget 添加到 App 需要进行少量设置,并且将使用 SwiftUI 来展示他内容。...最后,修饰符指定 Widget 库显示名称和描述,并允许用户选择小,或大版本 Widget。 请注意此 Widget 上 @main 属性用法。...在 Widget 显示内容 Widget 通常通过组合使用 SwiftUI 视图定义内容。...因为 Widget 支持所有三个小部件系列,所以它使用 widgetFamily 决定显示哪个特定 SwiftUI 视图,如下所示: struct GameStatusView : View {...在应用申明多个 Widgets 例如,如果游戏应用程序具有第二个用于显示角色健康状况小部件,而第三个用于显示排行榜,则将它们分组在一起,如下所示: @main struct GameWidgets:

1.4K20

WWDC 2020记录

APP ClipsAPP Clip互斥,需要审核NFC+iMessage+二维码每一个入口专注于一个功能使用SwiftUI 来开发APP Clip一段时间不使用,30天就会完整删除受限访问个人信息,有些...打造框架设置时间线让视图提前准备好,即预加载一个extension支持多个小组件,不同kindIntentConfiguration,支持配置Placeholder UI不支持滚动,不支持视频和动画支持点击小尺寸支持一个点击区域...,尺寸和大尺寸支持多个。...支持动态显示时间,系统可以自动倒计时刷新机会比较少,会根据查看和设备环境来刷新刷新是分钟级和小时级刷新,用户重复行为,Intert捐献给系统APP可以直接刷新小组件不能获得曝光数据,只有点击Mac...SiliconiOS适用后会自动在Mac App Store上架隐私使用PHPicker,可以不再强制获取用户照片权限大致位置使用许可自动填充功能DNS over TLS和HTTPsTLS Client

50940

Apple Widget:下一个顶级流量入口?

这可谓是一次可以载入史册发布会,宣布了 ARM 架构 Mac 芯片、软硬件生态大统一、iOS 14 系统界面大改等一系列激动人心消息。...而 Timeline Provider 提供数据有两部分,一部分是 TimelineEntry,另外一部分是 ReloadPolicy。...Widget 和 SwiftUI ---- Widget 只能用 SwiftUI 来进行开发,确切说,Widget 本质是一个随着时间线而更新 SwiftUI 视图。 ?...苹果要求 Widget 只能使用 SwiftUI 主要是基于几点考虑: 1、SwiftUI 经过一年发展,有了很大提升,不仅可以使用 SwiftUI 来构建整个应用程序,而且在一些方面已经优于基于...最后,也期待大家可以好好研究一下 Widget,结合自己产品,给到用户极致用户体验。

1.9K20

如何判断 ScrollView、List 是否正在滚动

比如在 SwipeCell[3] ,需要在可滚动组件开始滚动时,自动关闭已经打开侧滑菜单。遗憾是,SwiftUI 并没有提供这方面的 API 。...本文将介绍几种在 SwiftUI 获取当前滚动状态方法,每种方法都有各自优势和局限性。...: UIScrollView, willDecelerate decelerate: Bool)手指拖动结束后( 手指离开时 ),调用此方法在 SwiftUI ,很多视图控件是对 UIKit( AppKit...模式,因此无法有效地区分滚动是由那个控件造成方法三:PreferenceKey在 SwiftUI ,子视图可以通过 preference 视图修饰器向其祖先视图传递信息( PreferenceKey...判断准确度没有前两种方式高当可滚动组件内容出现了非滚动引起尺寸或位置变化( 例如 List 某个视图尺寸发生了动态变化 ),本方式会误判断为发生了滚动,但在视图变化结束后,状态会马上恢复到滚动结束滚动开始后

3.7K40

SwiftUI + Core Data App 内存占用优化之旅

本文将通过对一个演示 App 进行逐步内存优化方式( 由原先显示 100 条数据要占用 1.6 GB 内存,优化至显示数百条数据仅需 200 多 MB 内存 ),让读者对 SwiftUI 视图存续期...尽管从表面上来看,惰性容器仅会在视图进入可视区域时才会对其进行操作,但一旦该视图显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图 body 值。...在本例,子视图 body 值中一定会包含用于显示图片数据,因此,即使该视图已经被显示过( 滚动显示区域 ),该视图 body 值仍将占用不小内存。...我们可以通过在 onAppear 以及 onDisappear 对图片显示与否( 变量 show )进行控制( 迫使 SwiftUI视图 body 重新求值 ),从而减少因上述原因所增加内存占用...数据多份拷贝 当图片数据从 SQLite 经 Core Data 最终通过 SwiftUI 显示时,实际上在内存至少保存了三份拷贝: 行缓存 托管对象上下文( 托管对象被填充后 ) 显示该图片 SwiftUI

1.2K10
领券