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

如何在SwiftUI中动态调整可垂直滚动的VStack中一行的项目数?

在SwiftUI中,可以使用LazyVGrid来动态调整可垂直滚动的VStack中一行的项目数。LazyVGrid是一个视图容器,可以根据指定的列数自动调整布局。

以下是实现动态调整可垂直滚动的VStack中一行的项目数的步骤:

  1. 导入SwiftUI框架:
代码语言:txt
复制
import SwiftUI
  1. 创建一个View结构体,并在其中使用LazyVGrid来布局项目:
代码语言:txt
复制
struct ContentView: View {
    let items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] // 项目数组

    var body: some View {
        ScrollView {
            LazyVGrid(columns: [GridItem(.adaptive(minimum: 100))]) {
                ForEach(items, id: \.self) { item in
                    Text("\(item)")
                        .frame(width: 100, height: 100)
                        .background(Color.blue)
                        .cornerRadius(10)
                        .padding(10)
                }
            }
        }
    }
}

在上述代码中,我们使用LazyVGrid来创建一个自适应的网格布局,columns参数中的GridItem(.adaptive(minimum: 100))表示每个项目的最小宽度为100个点。

  1. ContentViewbody属性中使用ScrollView将内容包装起来,以实现垂直滚动。
  2. 创建一个PreviewProvider结构体,用于预览视图:
代码语言:txt
复制
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

完成上述步骤后,你就可以在SwiftUI中动态调整可垂直滚动的VStack中一行的项目数了。根据屏幕尺寸和设备方向的不同,LazyVGrid会自动调整每行的项目数,以适应不同的布局需求。

推荐的腾讯云相关产品:腾讯云云服务器(CVM),产品介绍链接地址:https://cloud.tencent.com/product/cvm

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

相关·内容

何在 SwiftUI 创建条形图

系列文章 如何在 SwiftUI 创建条形图 SwiftUI 水平条形图 在 iOS 16 中用 SwiftUI Charts 创建一个折线图 在 iOS16 中用 SwiftUI 图表定制一个线图...在 Swift 图表中使用 Foudation 库测量类型 开始图表布局 SwiftUI 对探索不同布局和预览实时视图结果是很友好。...图表会调整到适合它所处容器视图之中。同样图表可以放到任何没有其他视图新试图上,当设备旋转时,图标将会充满空间并调整大小。...图标被设置为固定大小,视图被嵌入到 ScrollView ,以便在设备旋转时滚动。...SwiftUI 是一个很好平台,用于创建视图和快速重构独立子视图。在 SwiftUI 构建条形图需要做一些工作,随着使用数据来试用条形图,可以确定更多定制化。

5.1K10

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

因此,如果你正在创建一个视图来显示滚动内容,并可能进行选择操作,那么在 iOS 和 macOS 上使用 List 将有最好体验。...accessibilityHidden 支持任意符合 View 协议元素,同时可以动态调整隐藏状态。...Swiftcord[12] 代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化在 SwiftUI List 显示大数据集响应效率[13] 一文,了解苹果工程师推荐方法。...macOS APIQ:对于运行 Monterey Mac,能否如何在 SwiftUI 实现下面需求建议:打开一个窗口在该窗口中初始化数据找到所有打开窗口确定一个窗口是否打开从不在该窗口视图中关闭一个窗口...在 SwiftUI ,有一个从第一版开始就存在但尚未公开SwiftUI 实现滚动容器 —— _ScrollView 。

14.8K30

掌握 ViewThatFits

在 iOS 16 SwiftUI 增加了一个新自适应布局容器 ViewThatFits。正如其名称所示,它作用是在给定多个视图中找出最合适视图并使用。...ScrollView:如果理想状态轴与滚动方向一致,则在滚动方向上一次性展示所有的子视图而无视父视图建议尺寸。 VStack、HStack、ZStack:所有子视图在理想状态下整体呈现。...SwiftUI 提供了两个版本 fixedSize ,我们当前使用版本要求视图在水平和垂直两个轴向上都使用理想尺寸,而另一个版本允许我们对单个轴向进行限定。...在 SwiftUI ,我们可以通过 frame 来修改视图在理想状态下呈现。...自适应滚动 通过下面的代码,我们可以实现在内容宽度超过给定宽度时,自动进入滚动状态。

17810

SwiftUI 方式进行布局

padding 是在布局层面进行调整,添加 padding 后视图,同时也会对其他视图布局产生影响。...我们将两个视图分别置于两个 overlay 层,尽管在视觉上,两者之间仍呈垂直排列,但实际上两者之间并无关联。...四、ScrollView 考虑到本文需求动画形态( 竖向滚动 ),使用 ScrollViewReader 提供滚动定位功能,同样可以满足需求。...scrollDisabled( 则让我们可以在 iOS 16+ 屏蔽 ScrollView 滚动手势 )。...因此,只需要在状态切换时,调整视图二对齐指南即可( 视图一将自动跟随视图二移动 )。 此种方式在视觉上与通过 VStack 实现类似,但两者在需求尺寸上有明显不同。

3.2K00

SwiftUI 之 HStack 和 VStack 切换

前言 SwiftUI 各种堆栈是许多框架中最基本布局工具,能够让我们定义组视图,这些组视图可以按照水平、垂直或覆盖视图对齐。...当涉及到水平和垂直变体时( HStack 和 VStack ),我们需要在这两者之间动态切换。...想了解更多信息,可以查看我文章 - SwiftUI 布局系统第三章 目前,我们按钮是垂直排列,并且填满了水平线上可用空间(你可以用以上示例代码预览按钮样子),虽然这在竖向 iPhone 上看起来很好...然而,就像上面的代码展示那样,使用 GeometeryReader 来展示动态切换有一个相当明显缺点,在几何图形阅读器总是会填充水平和垂直方向所有可用空间(以便测量实际空间)。...Xcode 14 一部分仍在测试阶段) 其中一个工具是新 Layout 协议,它既能让我们创建完整自定义布局,直接集成到 SwiftUI 布局系统,同时也提供给我们一种更丝滑更动画方式在各种布局之间动态切换

2.8K10

SwiftUI 方式进行布局

我们将两个视图分别置于两个 overlay 层,尽管在视觉上,两者之间仍呈垂直排列,但实际上两者之间并无关联。...四、ScrollView 考虑到本文需求动画形态( 竖向滚动 ),使用 ScrollViewReader 提供滚动定位功能,同样可以满足需求。...scrollDisabled( 则让我们可以在 iOS 16+ 屏蔽 ScrollView 滚动手势 )。...因此,只需要在状态切换时,调整视图二对齐指南即可( 视图一将自动跟随视图二移动 )。 此种方式在视觉上与通过 VStack 实现类似,但两者在需求尺寸上有明显不同。...有关转场动画更多内容,请参阅 SwiftUI 动画机制 一文 八、Layout 协议 在 4.0 版本SwiftUI 增加了 Layout 协议,通过该协议,开发者可以针对特定场景,创建自定义布局容器

4.8K80

优化在 SwiftUI List 显示大数据集响应效率

本文将通过一个优化列表视图案例,展现在 SwiftUI 查找问题、解决问题思路,其中也会对 SwiftUI 视图显式标识、@FetchRequest 动态设置、List 运作机制等内容有所涉及...在 SwiftUI 为视图设置显式标识目前有两种方式: 在 ForEach 构造方法中指定 由于 ForEach 视图数量是动态且是在运行时生成,因此需要在 ForEach 构造方法中指定可用来标识子视图...虽然我们已经找到了导致进入列表视图卡顿原因,但如何在不影响效率情况下通过 scrollTo 来实现到列表端点滚动呢?...解决方案一 从 iOS 15 开始,SwiftUI 为 List 添加了更多定制选项,尤其是解除了对列表分割线设置屏蔽且添加了官方实现。...我们将通过 SwiftUI-Introspect[7] 来实现在 List 滚动到列表两端。

9.1K20

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

比如在 SwipeCell[3] ,需要在滚动组件开始滚动时,自动关闭已经打开侧滑菜单。遗憾是,SwiftUI 并没有提供这方面的 API 。...本文将介绍几种在 SwiftUI 获取当前滚动状态方法,每种方法都有各自优势和局限性。...iOS 系统在 macOS 下 eventTracking 模式,该方案表现并不理想屏幕只能有一个滚动控件由于任意滚动控件滚动时,都会导致主线程 Runloop 切换至 tracing...ScrollView + VStack( HStack )这类组合,只需为滚动视图添加一个 scrollSensor 即可。...判断准确度没有前两种方式高当可滚动组件内容出现了非滚动引起尺寸或位置变化( 例如 List 某个视图尺寸发生了动态变化 ),本方式会误判断为发生了滚动,但在视图变化结束后,状态会马上恢复到滚动结束滚动开始后

3.7K40

SwiftUI水平条形图

SwiftUI水平条形图 水平条形图以矩形条形式呈现数据类别,其宽度与它们所代表数值成正比。本文展示了如何在垂直条形图基础上创建一个水平柱状图。 水平条形图不是简单垂直条形图旋转。...在Numbers 等应用程序,水平条形图被定义为独立图表类型,而不是垂直条形图。除了条形差异外,x轴和y轴格式也需要不同。...Bar Chart with multiple data sets in SwiftUI SwiftUI 水平条形图 将条形图转换为水平 水平条形图不仅仅是在垂直条形图上配置,有一些元素是可以重复使用...在水平条形图中,显示条形图上数值并隐藏X轴可以使图表更简洁。 显示和隐藏水平条形图上元素 结论 创建水平条形图SwiftUI代码与创建垂直条形图代码不同。...在创建垂直条形图时学到技术可以重复使用,但最好将水平条形图视为与垂直条形图不同图表。当我们深入到轴等组件时,可以看到两个图表轴线都是一样,但是它们标签和定位在x和y之间是换位

4.8K20

使用 SwiftUI 创建一个灵活选择器

我们有两个数组: singleLineResult 数组——负责存储适合特定项目 allLinesResult 数组——负责存储所有项目数组(每个数组都等同于一项目) 首先,我们检查从 HStack...如果结果小于 0,这意味着我们无法将下一个元素放入给定,因此我们将 singleLineResult 附加到 allLinesResult ,将 singleLineResult 设置为仅由当前元素组成数组...,我们必须计算 VStack 高度,以使 SwiftUI 更容易解释我们视图组件。...VStack 高度是根据两个值计算: 输入数据任何项目的高度(类似于宽度计算,通过使用 reduce 函数,总结与项目相关所有高度) 将显示在 VStack 行数 private func...,主要是配置所有属性,字体、颜色或边框。

26820

用 Table 在 SwiftUI 下创建表格

欢迎大家在 Discord 频道[2] 中进行更多地交流 Table 是 SwiftUI 3.0 为 macOS 平台提供表格控件,开发者通过它可以快捷地创建交互多列表格。...在 WWDC 2022 ,Table 被拓展到 iPadOS 平台,让其拥有了更大施展空间。本文将介绍 Table 用法、分析 Table 特点以及如何在其他平台上实现类似的功能。...与 List 一样,Table 内置了纵向滚动支持。在 macOS 上,如果 Table 内容( 行宽度 )超过了 Table 宽度,Table 将自动开启横向滚动支持。...,SwiftUI 会扩展更多样式到 iPadOS 平台 选择 在 Table 启用选择与 List 方式十分类似: struct TableDemo: View { @State var...上下文菜单、选择 ) List( Grid GridRow 并非真正意义上 ) 需要视图渲染( 保存成图片 ) LazyVGrid、Grid 固定标题 List、LazyVGrid、Grid

4K30

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

无优化滚动至底截屏 从 Instruments 分析来看,随着列表滚动,内存占用持续增加。 无优化效果 相信任何开发者都无法容忍这种内存占用情况出现。...在本例,子视图 body 值中一定会包含用于显示图片数据,因此,即使该视图已经被显示过( 滚动出显示区域 ),该视图 body 值仍将占用不小内存。...由于缓存机制存在,当我们通过 Core Data 从数据库获取某个数据时( 例如图片 ),缓存中会有一份副本。...数据多份拷贝 当图片数据从 SQLite 经 Core Data 最终通过 SwiftUI 显示时,实际上在内存至少保存了三份拷贝: 缓存 托管对象上下文( 托管对象被填充后 ) 显示该图片 SwiftUI...,内存占用仍呈线性增长 ),但至少表明是有机会从 Core Data 中找到优化角度。

1.3K10

何在 SwiftUI 视图中显示应用图标和版本

前言在应用显示应用图标和版本是为用户提供快速识别应用版本和变体好方法,无论是内部用户(测试人员或利益相关者)还是外部用户。...在本文中,我将展示如何创建一个访问 SwiftUI 视图,既能显示应用图标和版本,又能在各种文本大小和外观下看起来都很好:获取应用图标构建视图第一步是从主包获取应用图标。...但是,应用图标只能作为命名 UIImage 检索,所以我们需要先创建 UIImage,然后再转换为 SwiftUI Image。我们在一个垂直堆栈显示应用版本,包括一个标签和应用版本字符串。...我们使用 fixedSize() 修饰符确保应用图标和 VStack 视图高度相同。最后,我们将所有子视图组合成一个访问元素,并为其提供标签,以便为 VoiceOver 用户提供更好体验。...我们学习了如何在 SwiftUI 应用显示应用图标和版本信息。

13422

何在 SwiftUI 熟练使用 visualEffect 修饰符

前言在 WWDC 23 SwiftUI 引入了一个名为 visualEffect 新视图修饰符。此修饰符允许我们通过访问特定视图布局信息来附加一组动画化视觉效果。...下面我们将学习如何在 SwiftUI 中使用新 visualEffect 视图修饰符。介绍 visualEffect让我们从使用 visualEffect 视图修饰符最简单示例开始。...在 SwiftUI 框架先前版本,我们有视图修饰符,缩放、偏移、模糊、对比度、饱和度、不透明度、旋转等。它们全部都是视觉效果,并且现在符合 VisualEffect 协议。...总结本文章介绍了在 SwiftUI 引入新视图修饰符 visualEffect。该修饰符允许我们通过访问特定视图布局信息来附加一组动画视觉效果。...此外,还提到了 GeometryProxy 类型使用,以及 visualEffect 对动画值支持,使得可以根据视图帧和边界来动态调整视觉外观。

10000

SwiftUI 布局 —— 尺寸( 上 )

这类视图主要作用有: 突破 ViewBuilder Block 数量限制 方便为一组视图统一设置 view modifier 有利于代码管理 其他特殊应用, ForEach 支持动态数量子视图等...例如:ZStack 会将其父视图提供给它建议模式直接转发给 ZStack 子视图,而 VStack、HStack 则会要求子视图返回全部模式下需求尺寸,以判断子视图是否为动态视图( 在特定维度可以动态调整尺寸...在 SwiftUI ,通过设置或调整建议模式而进行二次布局场景很多,比较常用有:frame、fixedSize 等。...、HStack、VStack 等) 需求尺寸为容器内子视图按指定对齐指南对齐摆放后( 已处理动态尺寸视图 )总尺寸,详情请参阅 SwiftUI 布局 —— 对齐[4] 其他控件例如 TextField...,例如: 在 ZStack ,ZStack 为子视图设置渲染尺寸与子视图需求尺寸一致 在 VStack VStack 将根据其父视图提供建议尺寸、子视图是否为扩展视图、子视图视图优先级等信息

4.7K20

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

在本例,子视图 body 值中一定会包含用于显示图片数据,因此,即使该视图已经被显示过( 滚动出显示区域 ),该视图 body 值仍将占用不小内存。...图片 尽管上述优化技巧可能会对滚动流畅度产生一定影响( 视觉上不明显 ),不过考虑到它所带来巨大收益,在本例应该是一个相当不错选择。...由于缓存机制存在,当我们通过 Core Data 从数据库获取某个数据时( 例如图片 ),缓存中会有一份副本。...数据多份拷贝 当图片数据从 SQLite 经 Core Data 最终通过 SwiftUI 显示时,实际上在内存至少保存了三份拷贝: 缓存 托管对象上下文( 托管对象被填充后 ) 显示该图片 SwiftUI...图片 尽管本轮优化效果一般( 且数据增加后,内存占用仍呈线性增长 ),但至少表明是有机会从 Core Data 中找到优化角度。

2.4K40

SwiftUI 布局 —— 对齐

VStack、HStack、ZStack 等支持多视图布局容器 你是否了解 SwiftUI 常用布局容器构造方法对齐参数含义?它们又是如何实现呢?...由于需要考虑在特定维度上动态调整尺寸子视图,比如:Spacer 、Text 、frame(minWidth:maxWidth:minHeight:maxHeight) 等,VStack 和 HStack...总之,为 VStack、HStack、ZStack 这类包含多个子视图官方布局容器设置 alignment 含义就只有一种 —— 在特定维度上,将所有的子视图按照给定对齐指南进行对齐摆放。...overlay、background 在 SwiftUI ,除了我们熟悉 VStack、HStack、ZStack 、Grid 、List 外,很多 modifier 功能也都是通过布局来实现。...中一个用于调节尺寸布局容器,它会变换容器传递给子视图建议尺寸,也可能会改变子视图返回给容器需求尺寸。

6.3K20
领券