- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当用户触摸 Collection View 单元格时,它会扩展到全屏。然后单击 x 按钮,它会缩小回 Collection View 。
问题是,我调用 collectionView.reloadItems()
并且它只在第一次调用 cells init 函数。之后每次它都会调用 cellForItem(at: )
调用 collectionView.dequeueReusableCell()
,但它不会再次调用单元格的初始化,这使得里面的东西单元格未显示。
使单元格全屏,然后按 X 重新加载项目并将其恢复为 Collection View 中的正常大小
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let cell = collectionView.cellForItem(at: indexPath) as? CollectionViewCell else { return }
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [], animations: {
self.navigationController?.setNavigationBarHidden(true, animated: true)
// make cell full screen
cell.frame = collectionView.bounds
cell.superview?.bringSubviewToFront(cell)
//disable scroll
collectionView.isScrollEnabled = false
// make overlay full screen
cell.imageView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
// show X button
cell.showXBtn()
cell.xBtn.onTapped = {
// enable scroll
collectionView.isScrollEnabled = true
// shrink back to collection view
collectionView.reloadItems(at: [indexPath])
// hide x button
cell.hideXBtn()
// show navigation bar
self.navigationController?.setNavigationBarHidden(false, animated: true)
}
}, completion: nil)
}
如果我在这里调用 cell.setup(),代码工作正常。如果我尝试在单元格的初始化函数(或 didMoveToSuperview())中调用 cell.setup()
,它只会在第一次调用 collectionView.reloadItems()
时起作用。
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier,
for: indexPath) as! CollectionViewCell
// setup cell. If I call it within the cell, it only works the first time I call collectionView.reloadItem()
cell.setup()
// ignore spelling error lol
let image = UIImage(named: "bdyaFilter")!
cell.imageView.image = image
return cell
}
我的手机。 init 仅在我第一次尝试重新加载项目时被调用
class CollectionViewCell: UICollectionViewCell {
let imageView = UIImageView()
let xBtn = XButton()
override init(frame: CGRect) {
super.init(frame: frame)
// this is only called the first time i call collectionView.reloadItems()
// setup()
}
func setup() {
self.backgroundColor = .orange
self.layer.cornerRadius = 15
self.layer.masksToBounds = true
addImageView()
addXBtn()
hideXBtn()
}
private func addImageView() {
imageView.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height)
self.addSubview(imageView)
}
func addXBtn() {
xBtn.frame = CGRect(x: 25, y: 25, width: 30, height: 30)
self.addSubview(xBtn)
}
func hideXBtn() {
xBtn.isHidden = true
}
func showXBtn() {
xBtn.isHidden = false
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
最佳答案
这就是 collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifierfor:)
的全部要点。回收单元格对象,而不是在用户滚动时分配和释放一大堆对象。
您需要自己调用 setup()
,最好是从 prepareForReuse()
方法调用,并提供单元格可能需要的任何新值。
If you registered a class for the specified identifier and a new cell must be created, this method initializes the cell by calling its
init(frame:)
method. For nib-based cells, this method loads the cell object from the provided nib file. If an existing cell was available for reuse, this method calls the cell’sprepareForReuse()
method instead.
来自 the documentation of UICollectionView.dequeueReusableCell(withReuseIdentifier:for:)
关于swift - collectionView.dequeueReusableCell 不调用 Cell 的 init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445469/
cell.layoutIfNeeded() 和 cell.layoutSubviews() 和 cell.setNeedsDisplay() 方法一般有什么作用? 最佳答案 布局 subview 布置
是否可以在GXT 3.0中逐个单元地定义编辑器类型? 我需要创建一个转置表;列变成行,行变成列。在这种情况下,一列(从普通表格的角度来看)将具有不同的编辑器类型,而一行将具有相同的编辑器类型。 我正在
我的表格 View 中前 3 个单元格有一个标签,上面写着“松鼠”这个词。有没有办法做到这一点,如果 UILabel 在我的表格中的多个单元格中显示“Squirrels”,则只显示三个单元格中的第一个
让键和值相同有什么意义? JVM 会优化内存并使它们在堆中仅一份吗? 最佳答案 Map通常用于实现Set具有与背景图相同的属性。例如。如果映射是线程安全的,则相应的集合也将是线程安全的。如果 map
这个问题在这里已经有了答案: Testing for nil in Objective-C -- if(x != nil) vs if(x) (4 个答案) 已关闭 9 年前。
我用谷歌表格记录我们俱乐部的出席率。该表格链接到另一个谷歌表格,因此可以自动创建一个名字列表,并按字母顺序排序。在这张表格中,我还根据我们所做的活动,在人的名字旁边手动输入点数。。问题是,由于姓名列表
下面的代码如何工作: .Range("D4:F4").copy .cells(1,1).PasteSpecial 虽然下面不起作用: .Range("D4:F4").copy .cells(1,1)
我正在将一些值传递到 MySQL 数据库表中,我在考虑将整个 javascript 对象数组作为字符串传递是否更快,或者我是否应该根据速度将它们拆分为单元格。 例子: JavaScript 数组: v
display: table-cell; 和单元格之间的空间有问题。我希望所有单元格具有动态相同的宽度。 参见 JSFiddle "Ausstattung & Skizze" 比其他的要宽得多。有没有
我正在使用 apache poi 3.11,从 CellReference,我可以使用以下代码获取 rowIndex 和 Column Index。 CellReference cr = new Ce
我有一个带有圆形和阴影掉落单元格的 Collection View 。当单元格即将被导航栏覆盖时,单元格的阴影突然消失,而不是平滑地移出 View 。下面是代码: contentView.la
我刚开始使用 Swift 作为编程语言,但我遇到了自定义单元格的问题。 当我尝试创建自定义单元格,然后继续尝试按照我需要的方式设计它们(样式设置为自定义)时,一切看起来都不错。现在我不知道如何将特定数
目前,如果满足某些条件,我正在尝试设置一系列单元格的样式。我能够成功地将样式应用于一个单元格,但迄今为止未能成功地将其应用于一个范围。这是我所知道的有效方法: ElseIf OneA / OneC >
如果单元格 A1 为空白并且同一行中的任何单元格不为空白,我需要突出显示它。该行中的大多数单元格中都会包含公式。 最佳答案 创建一个新的条件格式,并使用这个公式: =AND($A$1="",COUNT
我确定这一定是可能的,但我找不到这样做的方法。 我有 2 列,一列带有数字,第二列带有日期。 例如: 数字日期 1 7月21日 2 7 月 22 日 3 7 月 23 日 4 7 月 24 日 5 7
我可能对范围有点困惑(我读过很多关于它的教程,但此时我不明白如何制作这个东西),无论如何,这就是我想要做的: 我有一个包含各种单元格的表格 Bla 1
宏记录器生成以下语句: Cells.Select 现在我明白,如果没有对象限定符,这会将所有单元格作为 Range 对象返回。 但是,我想知道这个语句的完全限定版本是什么? 是吗: Applicati
我知道 Range() 和 Cells() 属性是访问工作表上单元格的等效方法。但是,什么时候在这种组合中使用 Range.Cells() 是明智的呢? 我遇到了一个使用 Range("A1").Re
我有一个动态表,其中每一行都有一个文本框 (txtCantitate) 和一个按钮 (btnMinus)。在文本框中我有数量 (int) 并在按钮上单击我希望数量减少一个。在这里你有我在 table
我有两个 viewController。第一个 VC 在 tableCell 内有 collectionCell。第二个 VC 有 collectionCell,我有 swift File 和 Mod
我是一名优秀的程序员,十分优秀!