- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在观看并重新观看 WWDC 2020“现代单元配置”,但启发性并不大。
我知道内置的 ListContentConfiguration 具有类似于文本标签和 ImageView 等内置单元格样式组件的属性。但我从不使用内置的单元格样式;我总是创建一个单元子类,并在 xib 或 Storyboard原型(prototype)单元中从头开始设计单元 subview ,甚至在代码中构造它们。
那么如何使用 Apple 的配置来填充我的单元格的 subview ?
视频说:
In addition to the list content configuration we're also giving you access to the associated list content view which implements all of the rendering. You just create or update this view using the configuration, and then you can add it as a subview right alongside your own custom views. This lets you take advantage of all the content configuration features and combine the ListContentView with your own additional custom views next to it, such as an extra image view or a label.
Even when you're building a completely custom view hierarchy inside your cells, you can still use the system configurations to help.Because configurations are so lightweight, you can use them as a source of default values for things like fonts, colors, and margins that you copy over to your custom views, even if you never apply the configuration directly itself.And for more advanced use cases you can create a completely custom content configuration type with a paired content view class that renders it, and then use your custom configuration with any cell the same way that you would use a list content configuration.
makeContentView
方法一个“内容 View ”,一个带有 configuration
的 UIView属性(因为它符合 UIContentConfiguration)。最佳答案
编辑 我现在已经发表了一系列关于这个主题的文章,从 https://www.biteinteractive.com/cell-content-configuration-in-ios-14/ 开始。 .
这里的关键——我认为 Apple 在视频中根本没有明确说明这一点——这些单元配置的工作方式是从字面上撕掉单元的 contentView
。并将其替换为配置提供的 View 作为其 makeContentView
的输出.
因此,您所要做的就是手动构建整个内容 View ,运行时会为您将其放入单元格中。
这是一个例子。我们需要提供自己的采用 UIContentConfiguration 的配置类型,这样我们就可以定义自己的属性;它还必须实现 makeContentView()
和 updated(for:)
.所以假设我们有四个文本要显示在单元格中:
struct Configuration : UIContentConfiguration {
let text1: String
let text2: String
let text3: String
let text4: String
func makeContentView() -> UIView & UIContentView {
let c = MyContentView(configuration: self)
return c
}
func updated(for state: UIConfigurationState) -> MyCell.Configuration {
return self
}
}
在现实生活中,我们可能会通过更改返回此配置的某些属性更改的版本来响应状态更改,但在这种情况下,没有什么可做的,所以我们只返回
self
.
configuration
属性(property)。这是我们配置 View 的 subview 并应用配置的地方。在这种情况下,应用配置意味着只需设置四个标签的文本。我将这两个任务分开:
class MyContentView: UIView, UIContentView {
var configuration: UIContentConfiguration {
didSet {
self.configure()
}
}
private let lab1 = UILabel()
private let lab2 = UILabel()
private let lab3 = UILabel()
private let lab4 = UILabel()
init(configuration: UIContentConfiguration) {
self.configuration = configuration
super.init(frame: .zero)
// ... configure the subviews ...
// ... and add them as subviews to self ...
self.configure()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func configure() {
guard let config = self.configuration as? Configuration else { return }
self.lab1.text = config.text1
self.lab2.text = config.text2
self.lab3.text = config.text3
self.lab4.text = config.text4
}
}
您可以看到该架构的重点。如果在将来某个时候我们被分配了一个新的
configuration
,我们只需调用
configure
再次设置标签的文本,无需重建 subview 本身。在现实生活中,我们可以通过检查传入的配置来获得更高的效率;如果与当前配置相同,则无需调用
self.configure()
再次。
tableView(_:cellForRowAt:)
中这样交谈。执行:
override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(
withIdentifier: self.cellID, for: indexPath) as! MyCell
let config = MyCell.Configuration(
text1: "Harpo",
text2: "Groucho",
text3: "Chico",
text4: "Zeppo"
)
cell.contentConfiguration = config
return cell
}
所有这些都非常聪明,但不幸的是,内容 View 界面似乎必须在代码中创建——我们无法从 nib 加载现成的单元格,因为从 nib 加载的内容 View 及其所有 subview , 将被我们的
makeContentView
返回的内容 View 替换执行。因此,Apple 的配置架构不能与您在 Storyboard 或 .xib 文件中设计的单元格一起使用。很遗憾,但我看不到任何解决方法。
关于ios - 一般如何使用 iOS 14 单元格内容配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63075418/
我已经尝试在我的 CSS 中添加一个元素来删除每三个 div 的 margin-right。不过,似乎只是出于某种原因影响了第 3 次和第 7 次。需要它在第 3、6、9 等日工作... CSS .s
如何使 div/input 闪烁或“脉冲”?例如,假设表单字段输入了无效值? 最佳答案 使用 CSS3 类似 on this page ,您可以将脉冲效果添加到名为 error 的类中: @-webk
我目前正在尝试构建一个简单的 wireframe来自 lattice 的情节包,但由沿 y 轴的数百个点组成。这导致绘图被线框网格淹没,您看到的只是一个黑色块。我知道我可以用 col=FALSE 完全
在知道 parent>div CSS 选择器在 IE 中无法识别后,我重新编码我的 CSS 样式,例如: div#bodyMain div#paneLeft>div{/*styles here*/}
我有两个 div,一个在另一个里面。当我将鼠标悬停 到最外面的那个时,我想改变它的颜色,没问题。但是,当我将鼠标悬停 到内部时,我只想更改它的颜色。这可能吗?换句话说,当 将鼠标悬停到内部 div 上
我需要展示这样的东西 有人可以帮忙吗?我可以实现以下输出 我正在使用以下代码:: GridView.builder( scrollDirection: Axis.vertical,
当 Bottom Sheet 像 Android 键盘一样打开时,是否有任何方法可以手动上推布局( ScrollView 或回收器 View 或整个 Activity )?或者你可以说我想以 Bott
我有以下代码,用于使用纯 HTML 和 CSS 显示翻转。当您将鼠标悬停在文本上时,它会更改左右图像。 在我测试的所有浏览器中都运行良好,Safari 4 除外。据我收集的信息,Safari 4 支持
我构建了某种 CMS,但在使用 TinyMCE 和 Bootstrap 时遇到了一些问题。 我有一个页面,其中概述了一个 div,如果用户单击该 div,他们可以从模态中选择图像。该图像被插入到一个
出于某种原因,当我设置一个过渡时,当我的鼠标悬停在一个元素上时,背景会改变颜色,它只适用于一个元素,但它们都共享同一个类?任何帮助我的 CSS .outer_ad { position:rel
好吧,这真的很愚蠢。我不知道 Android Studio 中的调试监视框架发生了什么。我有 1.5.1 的工作室。 是否有一些来自 intellij 的 secret 知识来展示它。 最佳答案 与以
我有这个标记: some code > 我正在尝试获取此布局: 注意:上一个和下一个按钮靠近#player 我正在尝试这样: .nextBtn{
网站:http://avuedesigns.com/index 首页有 6 个菜单项。我希望每件元素在您经过时都有自己的颜色。 这是当您将鼠标悬停在 div 上时将所有内容更改为白色的行 li#hom
我需要在 index.php 文件中显示它,但没有任何效果。我所有的文章都没有正确定位。我将其用作代码: 最佳答案 您可以首先检查您
我是一名优秀的程序员,十分优秀!