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

深入了解 SwiftUI 5 中 ScrollView 新功能

SwiftUI 5.0 中,苹果大幅强化了 ScrollView 功能。新增了大量新颖、完善 API。本文将对这些新功能进行介绍,希望能够让它们更多、更早帮助到有需要开发者。...例如,下面的两种实现中,ScrollView 底部空间是不同。...NamedCoordinateSpace.scrollViewSwiftUI 5 中,苹果新增了 NamedCoordinateSpace 类型,方便用户命名坐标系,并提供了预置 .scrollView...总结 我完全没有想到,在 SwiftUI 5 中,苹果对 ScrollView 进行了全面增强。值得赞赏是,他们不仅提供了一些一直期待功能,而且在 API 设计和实现完成度上都非常出色。...就我个人而言,在 SwiftUI 5 中,ScrollView 原生方案已经能够满足大多数需求,因此我们将看到更多人采用 ScrollView + LazyStack 组合方式。

60220

SwiftUI 中布局工作原理

有些事情已经解释过了,有些可能是你自己弄明白,但更多是你在这一点上想当然事情,所以我希望一个详细探索能真正为 SwiftUI 工作方式提供一些启示。...SwiftUI 中布局工作原理 ---- 所有的 SwiftUI 布局都有三个简单步骤,理解这些步骤是每次获得优秀布局关键。步骤如下: 父视图提供一个大小并询问其子视图大小。...在幕后,SwiftUI 执行第四步:尽管它将位置和大小存储为浮点数,但在渲染时,SwiftUI 会将所有像素舍入到最接近值,这样我们图形仍然清晰。...background(Color.red)),文本视图成为其背景子视图。当涉及到视图及其修改器时,SwiftUI有效地从下到上工作。...当我们在background()中使用它时,简化布局对话是这样工作: 背景:嘿,文本,你可以有整个屏幕,你想要多少? 文本:我需要X乘Y点;我不需要其余。 背景:好

3.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

SwiftUI 方式进行布局

在初始状态时( show == false ),视图一( 红色视图 )底部与屏幕底部对齐,当 show == true 时,视图二( 绿色视图 )底部与屏幕底部对齐。...准备工作 我们首先将一些可复用代码提取出来,以简化之后工作: // 视图一 struct RedView: View { var body: some View { Rectangle...== true 时,视图二( 绿色视图 )底部必然与屏幕底部对齐,因此,将 overlay 对齐指南设置为 bottom ,可以极大地简化我们初始布局声明。...ScrollView 会使用父视图给定全部建议尺寸创建滚动区域,但在询问其子视图需求尺寸时只会提供理想尺寸。...尽管当前需求仅有两个视图,但我们仍然可以从中提炼出场景特性:在垂直排列前提下,在特定状态时,指定视图底部与容器视图底部对齐。

3.2K00

SwiftUI 方式进行布局

在初始状态时( show == false ),视图一( 红色视图 )底部与屏幕底部对齐,当 show == true 时,视图二( 绿色视图 )底部与屏幕底部对齐。...准备工作 我们首先将一些可复用代码提取出来,以简化之后工作: // 视图一 struct RedView: View { var body: some View { Rectangle...== true 时,视图二( 绿色视图 )底部必然与屏幕底部对齐,因此,将 overlay 对齐指南设置为 bottom ,可以极大地简化我们初始布局声明。...ScrollView 会使用父视图给定全部建议尺寸创建滚动区域,但在询问其子视图需求尺寸时只会提供理想尺寸。...尽管当前需求仅有两个视图,但我们仍然可以从中提炼出场景特性:在垂直排列前提下,在特定状态时,指定视图底部与容器视图底部对齐。

4.7K80

Android ScrollView顶部下拉和底部上拉回弹效果

要实现ScrollView回弹效果,需要对其进行触摸事件处理。先来看一下简单效果: ?...根据AndroidView事件分发处理机制,下面对dispatchTouchEvent进行详细分析: 在加载布局完成之后,获取ScrollView第一个子元素,保存它参数,left top right...bottom参数,根据顶部下拉操作和底部上拉操作进行子View布局参数根据滑动距离改变,ACTION_UP时候判断是否存在回弹,如果需要则进行动画回弹到原来位置,可以添加一个回弹结束监听,比如监听回弹处理跳转到其他页面的操作等...具体实现如下,添加了是否禁用顶部和底部回弹参数设置,以及回弹效果结束监听。...还可以拓展把回弹顶部和底部添加其他动画效果(之后再拓展试下)。 <?xml version="1.0" encoding="utf-8"?

2.7K21

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

快速检索数组元素Q:为什么没有简单方法将 TABLE 选择行映射到提供内容数组元素上?似乎唯一方法是在数组中搜索匹配 id 值,这对于大来说似乎效率很低。...阅读 The SwiftUI Layout Protocol [11]了解如何创建自定义布局。创建从底部开始滚动视图Q:我如何实现一个在底部对齐滚动视图,在 macOS 上会不会有糟糕性能?...A:你最好选择是使用 ScrollView 和 ScrollViewReader,并在 onAppear 或新内容进来时滚动到最底部视图。我不建议尝试旋转滚动视图。...在 SwiftUI 中,有一个从第一版开始就存在但尚未公开SwiftUI 实现滚动容器 —— _ScrollView 。...该滚动容器提供了不少标准 ScrollView 无法提供 API 接口,例如对手势加强控制、容器内视图位移、反弹控制等。

14.7K30

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

3、再提一点关于上面说滚动视图,在UIKit中我们可以用UICollectionView搞定一切,但是在SwiftUI中没有这个控件,我建议采用方式是 ScrollView + HStack + VStack...方式去实现,很多同行有说目前来看SwiftUIList在数据量大情况下性能不是特别好,采用ScrollView是个不错方式,而且也很容易构建出来,并不是说每一个Item位置都需要你去计算,...Gesture 这个我们可以说说,它就是我们具体手势父类,像我们单击手势和我们这里用到拖拽手势一样。...具体我们会看下面的代码,他们区别就是像拖拽我们可以监控它改变状态,点击或者双击、长按等我们可以添加事件等等。...下面是拖拽代码: /// 定义拖拽手势 private var dragGesture: some Gesture{ DragGesture()

11.7K20

Android中控制和禁止ScrollView自动滑动到底部方法

一、Android 控制ScrollView滚动到底部 在开发中,我们经常需要更新列表,并将列表拉倒最底部,比如发表微博,聊天界面等等, 这里有两种办法,第一种,使用scrollTo(): public...(ScrollView.FOCUS_DOWN);滚动到底部 scrollView.fullScroll(ScrollView.FOCUS_UP);滚动到顶部 需要注意是:该方法不能直接被调用 因为Android...(ScrollView.FOCUS_DOWN); } }); 二、禁止ScrollView自动滑动到底部 但有的时候能我们又需要禁止ScrollView自动滑动到底部,以下是解决方法: 具体表现...ScrollView 嵌套 GridView 、ListView等类似的控件时,当从网络上获取数据时刷新界面,此事发生情况是: ScrollView 自动滑到屏幕最低端,具体来说时滑动展示数据最后一条位置..." 总结 以上就是这篇文章全部内容了,希望本文内容对大家学习或者工作具有一定参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ZaLou.Cn支持。

3.4K20

掌握 SwiftUI Safe Area

使用 safeAreaInset 扩展安全区域 在 SwiftUI 中,所有基于 UIScrollView 组件(ScrollView、List、Form),在默认情况下都会充满整个屏幕,但仍可确保我们可以在安全区域内看到所有的内容...safeAreaInsetList2 遗憾是,在 iOS 15 之前,SwiftUI 并没有提供调整视图安全区手段,如果我们想通过 SwiftUI 手段创建一个自定义 Tabbar 时,列表中最后内容将被...相同代码,在 iPhone 8 下表现 image-20211120172325088 iOS 15.2 之前版本,safeAreaInset 对 List 和 Form 支持有问题(ScrollView...,固定底部状态条。...此时,底部状态条表现肯定不符合设计初衷。 如果想让底部状态条固定,同时又保持 TextField 自动避让能力,需要通过监控键盘状态,做一点额外操作。

7.5K31

构建稳定预览视图 —— SwiftUI 预览工作原理

作为 SwiftUI 最引人注目的功能之一,预览功能吸引了不少开发者初次接触 SwiftUI。然而,随着项目规模增长,越来越多开发者发现预览功能并不如最初想象那么易用。...由于预览崩溃次数和场景增加,一些开发者已经视预览为 SwiftUI 缺点之一,并对其产生了排斥感。 预览功能真的如此不堪吗?我们当前使用预览方式真的妥当吗?...// implement } 修改为: func select(_: ContentView.Item) { // implement } 修改后,预览功能可以正常工作了...可惜是,Toomas Vahter在文章中没有告诉读者崩溃原因。我借用这段代码来与大家一起探究预览功能是如何工作。...预览工作流程 我们对上面的探索过程进行一个梳理,大致上可以得到如下工作流程: Xcode 生成预览衍生代码文件 Xcode 编译整个项目,解析文件、获取预览视图实现、准备依赖其他资源 Xcode

42910

SwiftUI案例:天气

SwiftUI案例:天气 效果 目标 实现静态仿iOS天气APP程序 文件与配置 外观配置 外观配置需要从 '代码' 中下载文件并提取对应图片 需要配置在 Assets.xcassets...文件中 需要配置在 SpriteFiles/Assets.xcassets 文件中 动态图片导入 在工作项目文件夹下创建名为 SpriteFiles Group 并在其中依次导入...RainFall.sks RainFallLanding.sks 创建View视图 在工作项目文件夹下创建名为 View Group 并在其中依次创建 Home.swift CustomStackView.swift...CustomCorner.swift WeatherDataView.swift 视图文件 创建Model模板 在工作项目文件夹下创建名为 Model Group 并在其中创建 Forecast.swift...视图与模板实现 ContentView.swift 这是应用视图总体框架布局,需要自适应屏幕尺寸 import SwiftUI struct ContentView: View { var

4.7K21

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

比如在 SwipeCell[3] 中,需要在可滚动组件开始滚动时,自动关闭已经打开侧滑菜单。遗憾是,SwiftUI 并没有提供这方面的 API 。...本文将介绍几种在 SwiftUI 中获取当前滚动状态方法,每种方法都有各自优势和局限性。...目前 SwiftUI 在内部实现上去 UIKit( AppKit )化很明显,比如,本节介绍方法在 SwiftUI 4.0 中已经失效方法二:Runloop我第一次接触 Runloop 是在学习 Combine...preference 与 onChange 调用时机非常类似,只有在值发生改变后才会传递数据。在 ScrollView、List 发生滚动时,它们内部子视图位置也将发生改变。...待 SwiftUI 更多底层实现不再依赖 UIKit( AppKit )之时,才会是它 API 爆发期。希望本文能够对你有所帮助。

3.7K40

WWDC 23 之后 SwiftUI 有哪些新功能

前言 WWDC 23 已经到来,SwiftUI 框架中有很多改变和新增功能。在本文中将主要介绍 SwiftUI 中数据流、动画、ScrollView、搜索、新手势等功能新变化。...数据流 Swift 5.9 引入了宏功能,成为 SwiftUI 数据流核心。SwiftUI 不再使用 Combine,而是使用新 Observation 框架。...在之前 SwiftUI 框架版本中,应该使用 @ObservedObject 属性包装器来订阅更改。现在不需要了,因为 SwiftUI 视图会自动跟踪符合 Observable 协议类型更改。...动画 动画始终是 SwiftUI 框架中最重要部分。在 SwiftUI 中轻松实现任何动画,但之前框架版本缺少一些现在具有的功能。...ScrollView 今年 ScrollView 有了很多优秀新增功能。首先,可以使用 scrollPosition 视图修饰符来观察内容偏移量。

30620

GeometryReader :好东西还是坏东西?

在非滚动方向上,ScrollView 会向子视图提供该维度上全部可用尺寸。而在滚动方向上,它向子视图提供建议尺寸为 nil。...由于 GeometryReader ideal size 为 (10,10),因此,在滚动方向上,其返回给 ScrollView 需求尺寸即为 10。...例如,如果我们想在 ScrollView 中以 16:9 比例显示图片(即使图片自身比例与此不符): struct GeometryReaderInScrollView: View { var...然后,通过 frame 调整 GeometryReader 向 ScrollView 提交需求尺寸高度。这样,我们就能得到期望显示结果。...请阅读 用 SwiftUI 方式进行布局[9] 和 在 SwiftUI 中实现视图居中若干种方法[10] 两篇文章,以了解面对同一个需求,SwiftUI 有多种布局手段。

37570

SwiftUI 视图生命周期研究

尽管在结构体构造函数中,我们可以使用特定属性包装器(例如@State、@StateObject 等)声明依赖项,但我并不认为注册数据依赖工作是在初始化阶段进行。...如果在构造方法中进行注册依赖工作,将不符合创建轻量化构造方法准则。...body 值是在主线程上进行,并且 SwiftUI 必须在一个渲染周期内完成所有的计算、比较、布局等工作。...,将完成依赖项建立工作•在视图生命周期中,只有一个依赖项副本•在视图生命周期中,无论创建多少个实例,同一时间只有一个实例可以连接到依赖项•依赖项为视图 Source of truth 了解 SwiftUI...尤其在 WWDC 2020 专题中已经明确告知应创建尽可能轻量化结构体构造器后,开发者已经将很多原本在构造器中进行数据准备工作转移到了 onAppear 中进行。

4.3K30
领券