- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在另一个 uicollectionview 中有一个 uicollectionview。当我水平滚动单元格时,如您所见,“顶部单元格”(包含其他 collectionview 的单元格)没有出队:
如您所见,“Randonnées”与“Aborigènes”相同。
我已经尽我所能尝试了 prepareForReuse(),但它似乎不起作用。我知道其他人遇到了一个非常相似的问题,但没有一个相关主题对我有用:/
这是我的一些代码:
class X3ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
// MARK: Variables
let cellID = "pouet"
let delegate = UIApplication.shared.delegate as! AppDelegate
var cell : X3ContentCollectionViewCell?
// MARK: UI
let titleView : UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
var mainCollectionView : UICollectionView = {
let layout = UICollectionViewFlowLayout()
let view = UICollectionView(frame: .zero, collectionViewLayout: layout)
view.collectionViewLayout = layout
layout.scrollDirection = .horizontal
layout.minimumLineSpacing = 0
view.isPagingEnabled = true
view.translatesAutoresizingMaskIntoConstraints = false
view.backgroundColor = .white
return view
}()
var menuBar: X3MenuBar?
override func viewWillAppear(_ animated: Bool) {
print(delegate.ds.X3data)
}
// MARK: ViewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.blue
mainCollectionView.dataSource = self
mainCollectionView.delegate = self
mainCollectionView.register(X3ContentCollectionViewCell.self, forCellWithReuseIdentifier: cellID)
menuBar = X3MenuBar()
menuBar?.view.translatesAutoresizingMaskIntoConstraints = false
menuBar?.rootController = self
addMenuScrollView()
addMainView()
}
// MARK: Methods
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return delegate.ds.X3data!.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
cell = mainCollectionView.dequeueReusableCell(withReuseIdentifier: cellID, for: indexPath) as? X3ContentCollectionViewCell
cell?.indexOfContent = indexPath.row
return cell!
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width, height: view.frame.height-25)
}
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
let screenWidth = UIScreen.main.bounds.size.width
let itemIndex = Int(targetContentOffset.pointee.x / screenWidth)
menuBar?.scrollToItemIndex(item: itemIndex)
}
func scrollToItemIndex(item: Int) {
mainCollectionView.selectItem(at: IndexPath(row: item, section: 0), animated: true, scrollPosition: .centeredHorizontally)
delegate.ds.X3index = item
}
//MARK: UI Methods
func addMainView() {
view.addSubview(mainCollectionView)
mainCollectionView.topAnchor.constraint(equalTo: (menuBar?.view.bottomAnchor)!).isActive = true
mainCollectionView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
mainCollectionView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
mainCollectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}
func addTitleView() {
view.addSubview(titleView)
titleView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
titleView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
titleView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
titleView.heightAnchor.constraint(equalToConstant: delegate.gfx.X1ViewTitleHeigth!).isActive = true
}
func addMenuScrollView() {
view.addSubview((menuBar?.view)!)
menuBar?.view.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true
menuBar?.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
menuBar?.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
menuBar?.view.heightAnchor.constraint(equalToConstant: 30).isActive = true
}
deinit {
delegate.ds.X3data = nil
}
}
还有另一个重要的部分:
class X3ContentCollectionViewCell: UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
let cellId = "pouet"
let delegate = UIApplication.shared.delegate as! AppDelegate
var indexOfContent = 0
var customCollectionView : UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.minimumLineSpacing = 0
layout.minimumInteritemSpacing = 0
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
cv.collectionViewLayout = layout
cv.backgroundColor = .white
cv.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 20, right: 0)
cv.translatesAutoresizingMaskIntoConstraints = false
return cv
}()
override init(frame: CGRect) {
super.init(frame: frame)
customCollectionView.register(X3ContentMenuCellCollectionViewCell.self, forCellWithReuseIdentifier: cellId)
customCollectionView.dataSource = self
customCollectionView.delegate = self
addSubview(customCollectionView)
customCollectionView.topAnchor.constraint(equalTo: topAnchor).isActive = true
customCollectionView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
customCollectionView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
customCollectionView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -5).isActive = true
customCollectionView.reloadData()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return ((delegate.ds.X3data?[self.indexOfContent] as! NSDictionary)["images"] as! NSArray).count
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if indexPath.item == 0 {
return CGSize(width: frame.size.width, height: 170)
} else if indexPath.item == 3 {
return CGSize(width: frame.size.width, height: 170)
}else {
return CGSize(width: frame.size.width/2, height: 120)
}
}
override func prepareForReuse() {
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = customCollectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! X3ContentMenuCellCollectionViewCell
print((((delegate.ds.X3data?[self.indexOfContent] as! NSDictionary)["images"] as! NSArray)[indexPath.row] as! NSDictionary)["image"])
cell.X3Label.text = "\((((delegate.ds.X3data![self.indexOfContent] as! NSDictionary)["images"] as! NSArray)[indexPath.row] as! NSDictionary)["image"]!) \(self.indexOfContent)"
cell.X3ImageView.image = UIImage(named: (((delegate.ds.X3data?[self.indexOfContent] as! NSDictionary)["images"] as! NSArray)[indexPath.row] as! NSDictionary)["image"] as! String)
cell.X3ImageView.contentMode = .scaleAspectFill
cell.X3ImageView.clipsToBounds = true
if indexPath.item == 0 {
cell.X3Label.font = delegate.gfx.font(style: 2)
} else if indexPath.item == 3 {
cell.X3Label.font = delegate.gfx.font(style: 2)
}else {
cell.X3Label.font = delegate.gfx.font(style: 4)
}
return cell
}
deinit {
}
}
最佳答案
mrabins 是对的。试试这个,看看它是否有效。似乎当设置了 indexOfContent 时,您的数据就准备好了。所以只需重新加载即可。
var indexOfContent = 0 {
didSet {
customCollectionView.reloadData()
}
}
关于swift - dequeueReusableCell 在 3 个单元格后不出队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45401350/
根据官方文档,有两种方法可以从tableView的队列中获取可重用的cell。一个是 dequeueReusableCell(withIdentifier:for:),另一个是 dequeueReus
如您所知,如果不以某种方式重置tableViewCells,则在上下滚动后可能会错误显示。在网上搜索但没有找到满意的答案后,我想知道该怎么做。 我正在使用一个带有可重复使用的标识符的prototype
无法理解 UITableview 对“dequeueReusableCell”方法的调用。 UITableview 中的 dequeue 过程是如何发生的?我们是获得可重复使用的电池还是总是获得新电池
我正在创建一个类似于 bbc 应用程序的 iOS 应用程序- 我有一个表格 View ,有两个部分- 第一部分包含包含 ScrollView 宽图像的单元格- 第二部分包含可扩展单元格,其中包含 Sc
我有一个 tableView 是这样设置的: func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSInd
我在一个列表中使用了一个dequeueReusableCell,单元格中有4个UILabel。下面有截图。 凡是有“-”字头的标签,都是红色的,但翻了几页,数字就乱七八糟了。想知道是否有办法避免这种情
我有一个 Collection View ,我正在为单元格使用一个自定义类。每个单元格都有两个 TextView ,chapterTitleTextView 和 chapterBodyTextView
我是 iOS 编程领域的新手,我最近在网上看到了一些实现的代码示例,例如: functableView(_ tableView: UITableView, cellForRowAt indexPath
我在 Swift 上使用表格和单元格时遇到问题。 我创建了一个简单的 UITableViewController,其中包含两部分静态单元格。 回顾一下: 1 个表格 View 2 个部分 4 个单元格
我有一个数组,我将其显示为 dequeueReusableCell,我想在单元格旁边显示适当的图像。我的图像与位于 Assets 中的数组中的项目同名。 如何在 dequeueReusable 单元格
我正在使用自动填充实现搜索。我有 UITextField 和 UITableView。当用户更改文本字段中的文本时,我从服务器加载新数据并将其显示在表格 View 中。 结果的数量是固定的(5 个或更
好的,情况如下: 我有一个 Collection View ,在 cellForRow 中,我使用 dequeueReusableCell 来重用单元格。在每个单元格上,我都有一个自定义 UIView
当我们越过特定数量的行时,我想在自定义单元格中隐藏一些元素。我添加了比可见行更多的行,因为我需要滚动到没有弹跳效果的最后一行。但是现在我有更多的单元格,我不需要行 > 13 之后的单元格。 我尝试用
不断收到此错误: 'Editor placeholder in source file' 在 tableView.dequeueReusableCell 行上,不知道哪里出了问题。请帮助如何摆脱这个错
我现在有一个表格 View ,它被设置为像 Netflix 或 Spotify 侧 ScrollView 一样工作。为此,我向每个单独的表格单元格添加了一个 ScrollView ,该表格单元格包含列
我有一个数组,我为每个数组项创建了一个单独的 vc,tableView.dequeueReusableCell 显示错误的 vc。我读到这是因为该单元格是可重复使用的,并且它保留了先前选择的数组中的数
我有一个非常简单的 UIScrollView,其中包含一些内容(许多 subview )。此 ScrollView 用于显示用户发布的一些帖子(图片+文本)。其中一个 View 实际上是作者的图像,它
我正在尝试使用 UITableView 制作列表并收到错误消息: [UITableView] 没有成员“dequeueReusableCell” 我创建了一个带有原型(prototype)单元格的表
在 viewDidLoad 中,我像这样注册单元格: let cellIdentifier = "Cell" override func viewDidLoad() { super.viewD
我们已经设置了我们的 tableviewSource 和一个 tableview,但是在滚动大量单元格时,数据出现在错误的单元格中并且选择状态被应用于多个单元格时遇到了问题。 表格单元格根据 n+1
我是一名优秀的程序员,十分优秀!