大多数浏览器和
Developer App 均支持流媒体播放。
-
iOS 10 中 UICollectionView 的新功能
UICollectionView 是一个功能强大的类,它让您的 app 可以管理和自定视图布局。iOS 10 推出了多项可提高性能和简化布局的增强功能,并带来了您期盼的功能。了解如何利用 UICollectionView 及其同级类 UITableView 中的新功能,让您的 app 变得内容更丰富、运行更迅速。
资源
相关视频
WWDC21
WWDC16
-
下载
iOS 10中UICollection 的新特性 早上好
我叫Steve Breen 我叫Peter Hajas 我们都是 UIKit框架团队的工程师
我们很高兴跟大家分享 CollectionView上的新特性
让我们开始吧
我们今天早晨要讲三个话题 第一个话题是平滑滚动 每个iOS应用都希望 有一个不错的滚动体验 在CollectionView上 我们添加了一些了不起的新功能 帮助你的应用比以前任何 时候都能更好地滚动 其中最精华的部分是 很多改进 在你的应用中 不需要或只需要少量工作
接下来 我们会讲 自动调整单元格中的改进 我们在iOS 8中 引入了这个API 我们在iOS 10中 做了很多不错的改进 使它更易用
最后 我们会回顾一下 交互式重排序 去年在iOS 9中 我们引入了这个API 在iOS 10中 我们又改善了很多功能 让我们从平滑滚动开始讲吧
iOS设备体验的一个标志是 对用户的触摸 立即响应
响应式用户体验的 一个重要部分 是确保我的手指 在屏幕上滚动 这种对象在屏幕上的移动 就像在真实的世界中移动一样 这对于使用户全神贯注于应用 非常重要 我们要讨论一下 平滑滚动 及我们在UI CollectionView上 所做的改进 通过讨论一个演示应用 正如你即将看到 这个应用滚动效果并不是那么好 我们想像黄油一样滚动 但目前 需要太多滚动 就像一块花生酱 让我们看看iPad
我要切换到iPad上
澄清一点 蓝色方块通常消耗较少 但是我们故意把这些变慢了 想象一下若更复杂会怎么样 比如 也许它们有两种颜色
无论如何...
有了CollectionView 我们可以看到 滚动已经加载了内容 很好 很快 但是 让我们仔细查看一下 Steve 请注意看 当我再往下滚动时
哦 哎呦 一颗星 不能买
我也不会买 这种用户体验 是我们要极力避免的体验 这是怎么回事? 嗯 我们之前说过 这些是 非常简陋的蓝色方块 在你的应用中 模拟高消耗的复杂单元格 遇到CollectionView时 加载单元格 的时间恰好是它们请求被加载的时候 让我演示一下
我们要在这儿重新加载数据 我会打开一个视图 这个视图将显示在 CollectionView中加载的所有单元格 这样你可以看到那些底部的单元格 超出了 可见的边界 现在看看当我滚动时会发生什么
我们一下带入了 一整行单元格 这就是导致 滚动体验磕磕绊绊的原因
在性能术语中 我们可以称之为 应用掉帧 让我们再切回幻灯片 了解更多的信息 我们究竟要表达什么意思呢 当提到掉帧时 在你的应用中 用户期待 平滑的滚动体验 意思是你的应用要达到 那个神奇的数字 每秒60帧
让我们算一下 这意味着每次 刷新时 我们需要在16毫秒内显现那个窗口 好了 让我们看几帧 我们这儿有一个图表 显示了三个不同的帧
在第一帧中...
我们几乎不需要做什么 正如Peter刚提到的那样 我们在显示屏中上下移动当前内容 这是iOS上的一个高度优化的情形 所以速度超快 不需做很多工作就能达到 我们获得了这个很棒的五星级 滚动体验 这帧不错 掉帧剖析 但是在演示中 并不总那么好
偶尔 会有这样的情况 我们需要做大量的工作 不仅装载当前帧 还会掺杂下一帧
这是我们的广告帧 我们掉了一帧 一颗星
让我们以一种不同的视角来看它 在这个图中 我们可以看到有两个不同的区 顶部有一个区 我们把它叫做红区 这是我们失了一帧的地方 我们比那个神奇的16毫秒线高了
让我们查看一下 坐标轴上的标签 那么 在我们的y轴上 我们要用图表示出 主线程上的CPU时间 x轴 显示滚动发生时的最新事件 好的 让我们看一个图表
好吧 那么在这个图表中 显示了Peter 刚刚阐述过的内容 这些访问进入 到红区了 丢帧的地方 但最重要的是 看看这些平静时期 CollectionView 几乎什么都没做 然后 我们在最后 又一次进入到红区 如果我们稍微改变一下 这种现象会怎么样呢 并且降低我们的工作量 当用户滚动时
好的 酷 请看 现在 这些不再进入到红区了 并且形成了平静周期 我们让工作量均匀分布 我们平摊了时间
为了帮助讨论 如何把这些峰值变平 以及如何拉起这个谷值 来打造一个美好的、 始终如一的体验 我想谈一下 单元格生命周期 在iOS 9上的 我们要讨论的是 单元格的整个生命周期 很漂亮 让我们加入 CollectionView单元格 我们滚动时 可以说是 我们需要加入一个新的单元格
我们把它从重用队列中拿出来 叫做prepareForReuse
这就给了单元格一个 把自己重设为预设状态的机会 准备接收来自应用的新数据 接下来 我们继续调用 其余的cellForItemAtIndexPath 这是你要做大量工作的地方 填充单元格 你要建立数据模型 在单元格上设置数据模型 然后再把数据模型带回系统
在那个单元格即将在屏幕上显示之前 我们会调用 willDisplayCell
这可以给应用一个机会 完成最后一刻要做的工作 当单元格在屏幕上显示之前 对于即将要显示的单元格 我们会调用didEndDisplayingCell
好的 这就是单元格生命周期 iOS 10之前的版本 现在 让我们查看一下 在iOS 10上是怎么样的 我们有跟 Peter刚提过的 布局相同类型的布局 单栏 很适合演示用 那么现在 当用户向上滚动时 请注意这里 就在这个单元格 要显示在屏幕上之前 我们要把它从重用队列中拿进去 然后按照Peter刚讲的 那个熟悉的模式 我们会给它发送一个 prepareForReuse 然后 构造单元格中余下的内容 用cellForItemAtIndexPath 当用户继续滚动时 这里有点不一样了 我们不调用willDisplayCell 当我们创建这个单元格时 我们有个迟疑 延迟 然后就在它要显示时 我们会调用 willDisplayCell 好的 现在用户继续滚动
我们会让其他单元格淡出 聚焦在这个单元格的生命周期上 现在这个单元格要退出 可见的边框 从CollectionView中 那么我们会给它发送 didEndDisplayingCell Peter谈的是iOS 9 此时 单元格进入重用队列 然后就结束了 要使这个单元格再次显示数据 我们得重新开始 一个单元格的生命周期 并且调用cellForItemAtIndexPath 但在iOS 10中 我们会让那个单元格 保留较长的时间 因此 若用户稍微向上滚动 然后说 “哦 等一会儿 那是我妹妹刚生的小孩的照片 我要滚动回来” 我们将继续保留那个单元格并再次发送 willDisplayCell 然后 内容将继续在单元格中显示出来
请注意 Steve在这里展示的东西 同样适用于多栏布局 我们要一次一个地引入单元格 而不是一次全部引入 以便获得更好的滚动体验 你说的对 Peter 请注意 这些单元格实际上还 不能在屏幕上显示出来 它们仍然在屏幕外 现在 我们发送 我们DQ的第二个单元格 cellForItemIndexPath 并向上滚动两个单元格 现在我们要发送 willDisplayCellMessage 给那两个单元格 就在它们在屏幕上显示之前
这听起来像是一个很微妙的变化 实际效果要明显得多 通过在iOS 10中应用这个新生命周期 我们获得了自动的、 更快的滚动体验 让我们回到iPad上
我要切回iPad
你可以看到跟刚在iOS 9上看到的 相同的CollectionView 请记住 滚动当前内容 很好 很快 但当我们引入更多单元格时
就开始不流畅了 准备CollectionView时 我们同时也在烤箱里准备了一个CollectionView 正在iOS 10下烤着呢 我要转到那个CollectionView
在此 我们已经有了两个完全相同的 CollectionView 有同样的高消耗 在iOS 10上运行的蓝色方块
我们可以看到滚动当前内容 仍然很好 很快 很流畅 -但请仔细看 Steve -好吧 当我再滚动时 哦 很棒 五颗星 就是这样
这是因为我们使用了 这个新的单元格生命周期 我们并没有对应用做出任何变更 我要打开那个相同的视图 展示CollectionView 加载的所有单元格 帮助我们了解这个不同点
打开那个视图 在这里 你可看到底部的单元格行 已经准备好了 但是请看当我快速滚动时 会怎么样 并不是一次一行引入单元格 我们让工作量均匀分布 在滚动过程中 这是促成更平滑的滚动体验的原因 这样是不是很好
要了解更多信息 让我们切回幻灯片
相当不错 今天我们很高兴地发布一个新UI CollectionView Cell Pre-Fetching
是默认开启的 当你在iOS 10上编译你的应用时
不需要任何步骤
现在无论什么原因 你想用iOS 10之前 版本上的旧生命周期行为 选择关闭非常简单 只需把UICollectionView 的新属性设为 默认值isPrefetchingEnabled即可
我们有这个新技术应用相关的最佳范例
我们要谈的第一点是 我们想在cellForItemAtIndexPath中 完成所有繁重的工作 所有 给单元格创建的所有内容 在cellForItemAtIndexPath中 无论什么都应该居中
此外 我们想确保 做最少量的工作 在willDisplayCell 和didEndDisplayCell中
最后 很重要的一点是 cellForItemAtIndexPath 很可能还预备了一个单元格 这个单元格实际上永远不会被显示出来 用户可能已滚动到别处了 在那个单元格有机会 被显示出来之前
这很棒 只需在iOS 10中进行重新编译即可 并且做好你很可能已经在做的 在cellForItemAtIndexPath中的 大部分工作 你自然而然会免费获得更好的 滚动体验
但是 我们想再进一步 我们知道 有一大类应用 对于预备CollectionView 有个小问题 我该怎么处理 高消耗的数据模型呢?
事实的真相是 很多CollectionView 单元格 需要使用高消耗的 数据模型来创建 我指的是像这样的东西 解码图片、 和数据库通讯、 或在核心数据存储之外加载 我们知道 对于这类应用 我们并不想显示 像模板单元格这样的东西 当我们在做 异步网络请求时
为了解决这个问题 我们在iOS 10中引入了新API 可以告知 数据模型如何加载内容
自从引入它之后 就存在两种伴生对象: 数据源和委托 在iOS 10中 我们增加了第三个伴生对象 它是可选的 叫做prefetchDataSource 只有一个必需的方法 用起来很简单 ColletionView prefetchItemsAt indexPaths 这将会在预取数据源上调用 当从异步模型中预加载内容时 那个参数索引路径 是一个索引路径的有序数组 因此 那个数组中越靠前的项 越先显示出来 你可以用此改变 异步模型读取 在这个协议中 还有第二个可选方法 CollectionViewcancel PrefetcingForItemsAtindexPaths
将在预取数据源上调用
当我们决定 不再 滚动一组索引路径时 你可以用这个来取消或降低 任何待加载的优先级 有一个关于此API的重要信息 我想强调一下 这并不是替代 现有的数据模型 而是要跟现有的异步方案共同使用 你已在应用中为加载数据创建的
你要做的就是把这个 当作额外提示 内容何时加载 在CollectionView中
让我们演示一下 把它们联系起来 这个演示包含我们目前提到的所有概念 而且我们要引入 一点儿技术分析
来看看这个 Steve会做一件非常神奇的事儿 是技术分析 同志们
好的 我们要切回演示应用 我们之前看到的
好的 那么这是我们正在看的演示应用 但我们隐藏了这个很棒的功能 我们把它叫做技术分析面板 好的 那么 我现在要打开它 好的 那么我们有两个 不同的区 对吧 我们有红区 一颗星 是个不好的区域 然后 底部有很好很大块的绿区 我们可以在这个区域获得超级 平滑的滚动体验 我现在要做的是 运行 iOS 9版本的应用 我要再现一个 我之前记录的滚动会话 展示它是如何运作 以及如何执行技术分析的
好的 现在开始吧
滚动 执行技术分析
咔 咔
好的 看这是什么? 让我们看看这个图表 我们进入了八次红区 有八次掉帧
但同时 我们也可以看到我们有 很长的平静周期 就像我们之前提到的那样 因此 图表区域中 都是这种又大又尖的东西 然后让我们再看一下谷底 看看在iOS 10中是怎么样的
好的 切回iOS 10模式 Peter之前提到过的 现在 我要重现 相同的滚动会话 哇 看啊 Peter -平滑多了 Steve -是啊 看起来好多了 看看我们的成果 嘿 看那个 没有失帧
非常棒
看看我们在这图表曲线下得到了什么 这些峰值并没有上天 并且与平静周期 融合在了一起 现在 我们得到了这种平滑的效果 使应用在主线程上更积极地响应 好的 你准备好了吗Peter? -准备好了 -让我们开始吧 好的 现在我们要 看看iOS 10版本 但我们要使用API Peter之前提到过的 预取API 我们要把这些用到 这个应用中 好的 我已经准备好了演示应用 我要重现 相同的滚动会话 哇 Peter 看 -现在是黄油式的滚动了 Steve -看起来很不错 五颗星
技术分析也表明足以达到五颗星
好的 但Peter 这里有点儿不一样了 是吧 曲线上的区域中的 主队列活动 和之前的版本不一样了 曲线下降了不少 发生了什么? 那么 如果我们正确地使用预取API 我们很可能把数据模型读取移动到 后台队列上 释放主队列 就是这样 就是这么回事 现在 我们把所有工作都挪到了 后台队列上 我们不必再 扰乱主线程了 让我们切回幻灯片
接下来 我想谈一点儿 预取API的小技巧 以最合适的方式使你的应用 使用这个API
首先 当你调用预取时 你想要保证立即在后台队列上 完成所有工作 现在 我们有两种很棒的 技术可以实现: GCD和NSOperationQueue
还有一点很重要 预取是一种自适应技术 自适应技术是什么意思呢? 嗯 记得我们谈到 那些平静周期 和预取如何 利用那些的吗 通过额外工作
在应用中 有时候 用户滚动太快 没有平静时间 在这种情况下 当我们不得不 很频繁地更新显示时 我们将不进行预取 这样是正确的
最后 使用cancelPrefetchingAPI 来适应用户的焦点转移 现在 可能用户向上移动到了 CollectionView 并且正与内容一起滚动 但然后 他们改变了主意 开始向另一个方向滚动 我们将通过取消消息把这个事件通知给你 这样你就可以忽略那些优先的内容 聚焦在视图即将要滚动到的新内容上
对于CollectionView来说 这真的很棒 你什么也不用做 就能得到更好的滚动体验 只需要做一点儿工作 使用你已经写好的类 你就能得到更好的滚动体验 若你使用UITableView 请别担心 一点儿都不重要 我们也在表视图中 引入了完全一样的API
有一个类似的可选 预取数据源伴生对象 有一个类似的方法 只有一个方法 TableView prefetchRowsAt indexPaths 索引路径也是个数组 按照优先级排序 在表的可见区域 越靠前的索引路径 越先显示出来 跟CollectionView API一样 你可以用此来通知 异步数据模型读取 还有相同的第二个 可选委托方法 表视图 cancelPrefetchingForRowsAt indexPaths
就像Steve刚提到的那样 你可以用此 来取消或降低任何待定数据模型 加载的优先级 这是最棒的一点 就跟CollectionView API一样 这也要跟当前异步模型方案一起使用 你不必丢掉任何东西 相反 使用这个通知你正在做的加载 那么这就是iOS 10中的单元格预取
我们非常激动 引入了这个技术 我们迫不及待要看到实际的应用 有更平滑的滚动体验
接下来 我们要讲讲 我们今年所做的一些改进 针对自动调整单元格 我们在iOS 8中引入了这个API 今年我们又做了一些改进 使它更容易地应用到你的应用中 在我们讲这个之前 我想回顾一下现有的API 简单聊一下
在CollectionView中 我们发布了一个具体布局类 叫做 UICollectionViewFlowLayout 并且完全支持 这个类自动调整单元格
要开启这个功能 我们只需要设置 预估尺寸 把它设置为一些非零CG尺寸 这就会告诉CollectionView 你想 计算 动态布局 在显示内容时
现在 获得 单元格的实际尺寸 有三种不同的方法 可以实现 第一种方法是使用自动布局 如果你可以完全把 层级的内容视图限制到 CollectionView 单元格的内容视图中 我们就会请求自动布局系统计算 单元格的尺寸 并使用那个值
如果你不使用自动布局 或你需要更多手动控制 你可以重写sizeThatFits
最后 实现最终控制 你可以重写 preferredLayout AttributesFittingAttributes 不仅提供尺寸信息 还可以调整属性 比如阿尔法和变形
因此 指定单元格尺寸 使用三种机制中的一种 非常简单 大部分应用使用自动布局 但对于不使用自动布局的应用 可以通过第二个机制 实现更多的手动控制 但是我们发现 对于某些类型的布局 选择一个适当的预估尺寸 非常有挑战性 因为有时候很难猜测 我的意思是有时候你要用哪个? 50乘50、100乘100 等等 很难说
对于这种类型的布局来说 很酷的是 如果流布局能适应它的预期尺寸 然后使用这个数 而不是计算预估尺寸 通过我们已经订好的内容的实际尺寸
在iOS 10中 我们有个新API 可以在流布局中实现那个功能
你要做的就是将流 layout.EstimatedItemSize设置为 新常量 UICollectionView FlowLayoutAutomaticSize
通过将预估尺寸设为自动调整尺寸 这就表示 CollectionViewFlowLayout 会替你计算 它将保留一个已订好尺寸的 全部单元格的流水账 并使用那个流水账来影响 之后的尺寸预估值 等会儿就看到了 这使得流布局更精确 当指定CollectionView 单元格的尺寸时 以获得更好的性能 和更精确的布局 在我们指定尺寸时 我们要做一个演示来展示 UICollectionViewFlowLayout 自动调整尺寸的好处
我要切回到iPad
在这里我们有一个使用流布局的 CollectionView 每个单元格代表文本运行中的一个词 澄清一下 我们不提倡 创建文本查看器 或使用UICollectionView编辑器 但作为演示效果很好
我要把应用放在模式中
可以观察到流布局 当给每个单元格指定尺寸时 用户永远不会看到这些 但这种方式可以很好地了解 这个新API的优点 让我们以固定的预估值开始吧 就像我们在iOS 9上使用的那样 那么 我要打开模拟器
在这里 你可以看到 我们已经给每个单元格填充了 初始预估尺寸 就像我们刚刚猜想的那样 在文本运行中我要给第一个词 Lorem指定一下尺寸 看看会怎么样
那么 我们给Lorem制定了尺寸 现在已经是正确的尺寸了 请注意CollectionView 实际上并不接近 应有的目标布局尺寸 我们并没有使用那个预估值 来影响任何东西 一切都还是那么大 跟我们传过来的初始预估值一样
现在 这种情况会持续发生 当我们分别给每个单元格制定尺寸时 在CollectionView中
请注意 实际上我们并不能把 任何其他单元格的尺寸 调整为我们之前计算好的尺寸 很明显 在文本运行中 当我们给 最后一个词Fusce制定尺寸时 当我们要给这个词制定尺寸时
你会注意到 我们向上滑动了 所有其他单元格 使它们的y-位置失效 我们没有使用第一行文本的信息 来影响任何其他单元格的尺寸
现在我要把设备调成 iOS 10模式 使用UICollectionViewFlowLayout 自动调整尺寸 让我们切换一下
好的 切换好了 我们已填充 相同的初始尺寸 帮助你观察不同之处 我要给第一个词Lorem定个尺寸 看看会发生什么
哇哦 我们给第一个单元格重定了尺寸 并使用那个单元格尺寸 作为所有其他CollectionView单元格 运行中的预估值 现在布局还不是那么精确 但请注意 已经非常贴近 最终的结果了 事实上 y-位置的高度 非常正确
请注意 当我给这个文本运行 重新制定尺寸时 我们实际上是正使它越来越精确 全面地为CollectionView单元格调整预估尺寸
请注意 在文本运行中 给最后一个词重定尺寸时 不再使 其他单元格的y-位置失效 这很棒 可以很大程度上帮助我们 当你做这样的操作时 比如scrollToItemAt indexPath 现在 由于这个API的性质 你将得到最货真价实的东西 使用自动调整尺寸 如果你的单元格有 相似的宽或高 这就是自动调整 在iOS 10上的改进 让我们再返回去看幻灯片
这就是 自动调整单元格 并且现在 我们要谈一下 关于我们去年引入的API的信息 交互式重排序
这是个很熟悉的用户体验 对于表视图单元格用户来说 他们希望用户能抓住 一段内容然后移动它 并在你的表视图中 垂直地重新排列 去年我们的技术引入了 CollectionView 通过一个新的交互式重排序API 让我们再回到iPad 看看在演示中是什么样的
切回iPad 好的 切换好了 好的 那么我们有一个非常 漂亮的自定义布局
哦 快看这个滚动 Peter 我们很可能应用了预取 -非常简单 -很可能是 好的 让我们看一下 假如用户喜欢这个内容 但他们想要重新排列这个内容 可能会用手指拖拽 在CollectionView中 平滑地移动内容 请注意 它是如何自动回流的 不只是那样 如果我们改成 一个有着不同尺寸的项 你也可以进行以上操作 现在 当用户完成重新排序后 他们可能会松手 平滑地嵌入 就是这样 让我们再切回幻灯片 让Peter演示一下API
这就是iOS 9上的交互式重排序 这个API 非常简单
要开始一个交互式移动 你要先调用CollectionViews beginInteractiveMovement ForItematindexPath 索引路径体现的是 单元格的索引路径 我们想要移动的 如果你这样做是为了 响应某个手势 你可以点击测试 CollectionView 使用本地项的索引路径 接下来 手势每次更新时 我们都想 更新单元格的位置 响应手指的操作 为此 我们要调用updateInteractive MovementTargetPosition 在CollectionView 的坐标空间传递手势的位置
接下来 当我们想结束 交互式移动 并确认重新排序时 我们要在CollectionView上 调用endInteractiveMovement
CollectionView 会释放单元格 正确处理所有布局属性 然后 返回一条信息 给应用的数据源 这样你可以在模型中实现真正的重新排序
现在 如果手势取消了 或你不允许重新排序 此时 你可调用CollectionView的 cancelInteractiveMovement 在这里 我们会把一切恢复成 原来的样子 并且我们不会调用数据源
现在对于使用了UICollection ViewController的人来说 你的使用更加方便 你只需要设置 安装交互式移动 标准手势属性为真 CollectionViewController 将添加一个手势 替你调用这些方法 你要做的就是 实现数据源部分
这就是我们去年在iOS 9中 发布的API
今年 我们非常骄傲地宣布 我们即将在这个功能中添加分页支持 现在 没有新API 就是最好的API 自CollectionView 从UIScrollView中衍生出来之后 你所要做的就是 设置isPagingEnabled 属性 ScrollView的交互式属性 为真 这样就会开启新API 让我们切回iPad 在演示中看一下 在这里 我们有一个水平滚动的 CollectionView
当前并没有使用分页 而是连续的 看那个平滑的 滚动体验 耶 那么在重新排序中 当我们连续滚动时 我们选择CollectionView单元格 并把它移动到屏幕的边缘 然后我们就得到了非常好的 自动滚动行为 许多基于CollectionView 的应用用户应该很熟悉这个操作
现在 我要开启分页支持 我们可看到CollectionView 现有了页面尺寸递增 对于某些类型的CollectionView来说 这非常自然 这是新增的功能
我们调用的是相同的重排序API 但iOS 10中的新特性是 重排序能和分页可以同时使用 所以 当我把单元格移动到 屏幕边缘时
我们将以页面尺寸递增值自动滚动
这可以使应用获得真正的 主屏幕式重排序体验 我松开手 就是这样
让我们再返回幻灯片
这有点儿像内部战术 那么 我们早期开发iOS 10时 他经常来我的办公室 热情高涨 “Steve 我正做一个很棒的功能 开发人员会蹦起来的” 他当时也蹦起来了
我同意这种说法 这是个很棒的功能 我要迫不及待地展示 给开发人员 那么在WWDC期间 他找到了一个能展示这个功能的地方 于是我们讨论这个功能 并跟人们一起分享 那么 就在前几天 他又说了 “我们必须这样做 ” 我说 “好的 没问题 ” 两个幻灯片 九十秒 Peter 你能搞定吗? 谢谢Steve 只需要一分钟 另一个令我非常激动的功能 iOS 10中CollectionView的新功能 就是UIRefreshControl! 就是这个! UIRefreshControl现在可以直接 在CollectionView 的内部支持
但不只是如此 还可以直接在 UITableView内部支持 而无需 使用UITableViewController! 不只是这样 还由 UIScrollView内部支持 因为RefreshControl 现在只是一ScrollView属性!
非常简单易用 你所要做的就是创建 RefreshControl 把自己添加为它的一个目标 通过动作 然后在CollectionView 上进行设置 你将实现 立即刷新 非常感谢Steve 这对于我来说意义重大 嘿 做的不错 干得好
就像是我们今天谈话的一个总结 我们回顾了全新的 UICollectionView单元格预取功能 我们迫不及待地想看到你们 如何在你们的应用中进行应用 然后我们又谈了 新的预取数据源API Collection和表视图
接下来 我们谈了 自动调整单元格的改进 通过新的自动调整尺寸常量
然后我们顺带谈了 在iOS 9中引入的API 交互式重排序 以及在iOS 10上的新的分页支持
如果你想查看 示例代码和其他资源 关于这个应用和这场演讲 你可以看开发者网站上的这个地址
我们有一些 与这些技术相关的不错的演讲 我们再次感谢大家的到来
-希望你们度过美好的—— -非常感谢 -
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。