iOS 14中的UITableViewCell

2024-03-11 07:10
文章标签 14 ios uitableviewcell

本文主要是介绍iOS 14中的UITableViewCell,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

In a world were SwiftUI gets all the talk when it comes to building UI for iOS apps, UIKit got some surprising shout outs during the WWDC 2020, one of which was the “Modern cell configuration” presentation, where we saw some great updates to UITableViewCell coming our way, starting iOS 14. If you’ve already worked with the new “appearance states” of UINavigationBar and UITabbar in iOS 13, this should feel like a seamless transition because Apple seems to bring the same approach to UITableViewCell as well.

在世界上,SwiftUI在为iOS应用程序构建UI方面广为人知,在WWDC 2020期间,UIKit发出了令人惊讶的喊叫声,其中之一就是“现代单元配置”演示文稿,其中我们看到了UITableViewCell的一些重大更新首先,从iOS 14开始。如果您已经在iOS 13中使用过UINavigationBar和UITabbar的新“外观状态”,那应该感觉像是无缝过渡,因为Apple似乎也为UITableViewCell带来了相同的方法。

构型 (Configurations)

UITableViewCell in iOS 14 comes with Configurations. Apple defines a configuration as “the appearance of a view for a specific state”. If you’ve worked with complex tableview cells, there is a pretty good chance that you stumbled upon some lagging behavior at one point or another. As per Tyler Fox, one of the UIKit team engineers, configurations are lightweight, more efficient and they should help smoothing the scrolling animation and eliminate previous laggy behaviour. One of the reasons for that is that configurations are value types, so they are not expensive to create.

iOS 14中的UITableViewCell带有Configurations 。 Apple将配置定义为“特定状态的视图外观”。 如果您使用的是复杂的表格单元格,则很有可能偶然发现某一点或另一点的滞后行为。 根据UIKit团队工程师之一的Tyler Fox的说法,配置轻巧,效率更高,它们应有助于平滑滚动动画并消除以前的缓慢行为。 这样做的原因之一是配置是值类型,因此创建它们并不昂贵。

Each configuration can be implemented based on a state with the help of UICellConfigurationState. By default, UICellConfigurationState has 13 states that you can play with to take your UITableViewCellor UICollectionViewCell game to the next level. Some are inherited from UIViewConfigurationState (which can be used for configuring states for your header and footer), but you can also add your own custom states.

可以借助UICellConfigurationState基于状态来实现每个配置。 默认情况下, UICellConfigurationState具有13种状态,您可以使用这些状态将UITableViewCellUICollectionViewCell游戏提升到一个新的水平。 有些继承自UIViewConfigurationState (可用于配置页眉和页脚的状态),但是您也可以添加自己的自定义状态。

To be able to set up our configurations we will have to use the brand new updateConfiguration(using state: UICellConfigurationState) function on UITableViewCell. This method will be called before the cell is displayed and after any configuration state changes. You can also enforce its execution by calling setNeedsUpdateConfiguration() on your cell.

为了能够设置我们的配置,我们将必须在UITableViewCell上updateConfiguration(using state: UICellConfigurationState)全新的updateConfiguration(using state: UICellConfigurationState)函数。 在显示单元之前以及任何配置状态更改之后,将调用此方法。 您还可以通过在单元格上调用setNeedsUpdateConfiguration()来强制执行它。

In our cell class, we will override this function and start updating our configurations in 3 easy steps:

在我们的单元格类中,我们将覆盖此功能,并通过3个简单的步骤开始更新配置:

override func updateConfiguration(using state: UICellConfigurationState) {// start with a fresh configurationvar content = self.defaultContentConfiguration().updated(for: state)// define it dependent of the configuration stateif state.isSelected {content.text = "Selected"content.imageProperties.tintColor = .greencontent.image = UIImage(systemName: "checkmark")} else {content.text = "Unselected"content.textProperties.color = .darkGraycontent.image = UIImage(systemName: "applelogo")}// apply it to your cellself.contentConfiguration = content}
  1. Always start with a fresh configuration. For content configuration, you can do this by calling the cell’s defaultContentConfiguration() function. What calling updated(for: state) does is asking for the default configuration for the specific state.

    始终以全新的配置开始。 对于内容配置,可以通过调用单元格的defaultContentConfiguration()函数来实现。 调用updated(for: state)所做的是要求特定状态的默认配置。

  2. Configure each state according to your preference. For our scope, just configuring the isSelected state should be enough to understand how configurations work. Obviously, you should go for a switch if you will work with more than just these 2 states.

    根据您的喜好配置每个状态。 对于我们的范围,仅配置isSelected状态应该足以了解配置如何工作。 显然,如果您要处理的不仅仅是这两种状态,就应该进行switch

  3. Apply your new configuration to the cell for rendering.

    将新配置应用于单元以进行渲染。

As you can see we are not modifying the cell itself but rather a new configuration state that we later apply to the cell to render.

如您所见,我们不是在修改单元格本身,而是在稍后将其应用于要渲染的单元格的新配置状态。

There are 2 types of configurations:

有两种配置类型:

  • Content configurations. As the name suggests, content configurations can help you manipulate the content of the cell like image, text, secondary text, layout metrics and behaviors.

    内容配置 。 顾名思义,内容配置可以帮助您操纵单元格的内容,例如图像,文本,辅助文本,布局指标和行为。

  • Background configurations can help with the manipulation of background color, visual effect, stroke, insets and corner radius. All cells will inherit a default background configuration even if we don’t specify one.

    背景配置可以帮助操纵背景颜色,视觉效果,笔触,插图和拐角半径。 即使不指定,所有单元都将继承默认的后台配置。

Now let’s see how we can update the background of our cell as well. You probably guessed it already, with the same 3 steps:

现在,让我们看看如何更新单元格的背景。 您可能已经猜到了,只需执行以下3个步骤:

override func updateConfiguration(using state: UICellConfigurationState) {var content = self.defaultContentConfiguration().updated(for: state)// start with the default configuration for a list grouped cell stylevar background = UIBackgroundConfiguration.listGroupedCell()// define it dependent of the configuration stateif state.isSelected {content.text = "Selected"content.imageProperties.tintColor = .greencontent.image = UIImage(systemName: "checkmark")background.backgroundColor = .systemGray6} else {content.text = "Unselected"content.textProperties.color = .darkGraycontent.image = UIImage(systemName: "applelogo")background.backgroundColor = .white}// apply it to the cellself.backgroundConfiguration = backgroundself.contentConfiguration = content}
  1. Start with a new configuration. Here we use a new way of getting a configuration, by calling a default configuration for a preferred style. To do that we used UIBackgroundConfiguration which will give us the default iOS background configuration for the listGroupedCell() style. If we would want to do this for the content configuration as well we could use UIListContentConfiguration .

    从新配置开始。 在这里,我们通过调用首选样式的默认配置来使用一种获取配置的新方法。 为此,我们使用了UIBackgroundConfiguration ,它将为我们提供listGroupedCell()样式的默认iOS背景配置。 如果我们也想对内容配置执行此操作,则可以使用UIListContentConfiguration

  2. Define each state.

    定义每个状态。
  3. Apply the configuration to the cell for rendering.

    将配置应用于单元以进行渲染。

Now let’s see the result:

现在让我们看一下结果:

Image for post

Each cell is now configured according to its state and updates automatically once the state changes.

现在,每个单元根据其状态进行配置,并在状态更改后自动更新。

One thing to notice here is the image of the cell. We change its tint color on the isSelected state, but we don’t mention it for the other state and it still changes back its color. Because we start with a fresh configuration, the color is not being persisted through both states, it just uses the default one that came with the defaultContentConfiguration() method.

这里要注意的一件事是细胞的图像。 我们在isSelected状态下更改其颜色颜色,但在其他状态下未提及该颜色,但它仍会变回其颜色。 因为我们从全新的配置开始,所以颜色不会在两种状态下都保持defaultContentConfiguration() ,因此它仅使用defaultContentConfiguration()方法随附的默认颜色。

It is important to know that applying a background configuration will override any changes you make to the backgroundColor and backgroundView properties of the cell and set them to nil. The same behavior applies the other way around, so if you set the backgroundColor property on a cell, the background configuration will become nil

重要的是要知道,应用背景配置将覆盖您对单元格的backgroundColorbackgroundView属性所做的任何更改,并将它们设置为nil 。 相同的行为反之亦然,因此,如果在单元格上设置backgroundColor属性,则背景配置将变为nil

This is also the case for content configuration. It will override your imageView , textLabel and detailTextLabel properties and the other way around.

内容配置也是如此。 这将覆盖你imageViewtextLabeldetailTextLabel性质和周围的其他方法。

All the mentioned properties that will be overriden both by background configurations or content configurations will be deprecated in future releases.

在后台版本或内容配置中将覆盖的所有上述属性将在以后的版本中弃用。

结语 (Wrapping up)

The purpose of this article was to show how we should change our mindset for using UITableViewCell in iOS 14. It seems that, by making this type of improvements to it, Apple is trying to send a message that UIKit will still be around for a while.

本文的目的是展示如何改变在iOS 14中使用UITableViewCell的思维方式。似乎,通过对此类型的改进,Apple试图发送一条消息,表明UIKit仍然存在一段时间。 。

接下来要去哪里: (Where to go next:)

For a more in depth presentation of UITableViewCell in iOS 14, check out the WWDC 2020 “Modern Cell Configuration” video: https://developer.apple.com/videos/play/wwdc2020/10027/

有关iOS 14中UITableViewCell的更深入的介绍,请查看WWDC 2020“现代单元配置”视频: https : //developer.apple.com/videos/play/wwdc2020/10027/

翻译自: https://medium.com/@dragos.rotaru9/uitableviewcell-in-ios-14-ef19e877319f


http://www.taodudu.cc/news/show-8488436.html

相关文章:

  • iOS端游戏 OC C++ lua脚本交互
  • 【iOS】iOS持久化
  • 查看IOS游戏FPS
  • vue3.0修改窗口logo图标
  • typecho博客更换Logo图标
  • 更改matlab figure左上角的logo图标方法
  • 怎样隐藏后台左上角的wordpress logo图标?
  • 【python】生成二维码(带logo图标)
  • Android logo图标大小
  • 开源vue-element-admin/temple修改logo图标
  • vue如何设置网站标题和logo图标
  • tkinter设置自己的窗口logo图标
  • spring boot 更换logo图标
  • LOGO神器轻松玩转字母logo创意-优漫教育
  • pip升级与下载镜像网址
  • openSSH升级 详细
  • Spring Framework版本升级
  • SonarQube 8.7 升级
  • MRW短网址服务升级,今后可以自己修改长网址了
  • 通用网址升级为“.网址”域名意味着什么?
  • 人工智能的路上遇到了客栈点了一盘醋溜白菜
  • 利用数组和方法在eclipse中编辑简单的校园订餐系统
  • html表格的用法
  • 家里也可以烧出胶东名菜--大虾烧白菜
  • 干煸四季豆——似乎这个更正宗zz
  • 干锅辣白菜干锅娃娃菜
  • 霸王煸鸡
  • 干煸四季豆的做法
  • 《天真遇到现实》掀社会话题 黄菡专线来支招
  • 【AppCan开发者故事第四期】樊星阳: 37岁硬汉的移动创业路
  • 这篇关于iOS 14中的UITableViewCell的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/797044

    相关文章

    安卓链接正常显示,ios#符被转义%23导致链接访问404

    原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

    业务中14个需要进行A/B测试的时刻[信息图]

    在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

    【iOS】MVC模式

    MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

    PMP–一、二、三模–分类–14.敏捷–技巧–看板面板与燃尽图燃起图

    文章目录 技巧一模14.敏捷--方法--看板(类似卡片)1、 [单选] 根据项目的特点,项目经理建议选择一种敏捷方法,该方法限制团队成员在任何给定时间执行的任务数。此方法还允许团队提高工作过程中问题和瓶颈的可见性。项目经理建议采用以下哪种方法? 易错14.敏捷--精益、敏捷、看板(类似卡片)--敏捷、精益和看板方法共同的重点在于交付价值、尊重人、减少浪费、透明化、适应变更以及持续改善等方面。

    2021-8-14 react笔记-2 创建组件 基本用法

    1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

    2021-08-14 react笔记-1 安装、环境搭建、创建项目

    1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build

    用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

    一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

    PMP–一、二、三模–分类–14.敏捷–技巧–原型MVP

    文章目录 技巧一模14.敏捷--原型法--项目生命周期--迭代型生命周期,通过连续的原型或概念验证来改进产品或成果。每个新的原型都能带来新的干系人新的反馈和团队见解。题目中明确提到需要反馈,因此原型法比较好用。23、 [单选] 一个敏捷团队的任务是开发一款机器人。项目经理希望确保在机器人被实际建造之前,团队能够收到关于需求的早期反馈并相应地调整设计。项目经理应该使用以下哪一项来实现这个目标?

    C++11/14系列学习

    十一假期一直在看C++11新特性,比较出名的书《C++ Primer Plus》专门有一个章节来讲解,《C++ Primer》则将C++11的新特性融入到各个章节来学习。在假期的最后一天无意中发现实验楼有一个专门的教程来讲解,算是念念不忘,必有回响吧,特此整理出来,和大家一起学习。 作者网址:https://www.shiyanlou.com/courses/605,非常感谢! 注:本文并没有智

    iOS剪贴板同步到Windows剪贴板(无需安装软件的方案)

    摘要 剪贴板同步能够提高很多的效率,免去复制、发送、复制、粘贴的步骤,只需要在手机上复制,就可以直接在电脑上 ctrl+v 粘贴,这方面在 Apple 设备中是做的非常好的,Apple 设备之间的剪贴板同步功能(Universal Clipboard)确实非常方便,它可以在 iPhone、iPad 和 Mac 之间无缝传输剪贴板内容,从而大大提高工作效率。 但是,iPhone 如何和 Wind