- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用自定义布局处理 UICollectionView
。这两天我无法理解如何将 header 添加到 UICollectionView
。我有非常简单的 View Controller (在具有自定义布局的 Storyboard中创建):
class ACollectionViewController: UICollectionViewController {
enum Identifiers: String {
case CellIdentifier = "Cell"
case HeaderIdentifier = "Header"
}
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: Identifiers.HeaderIdentifier.rawValue)
}
// MARK: UICollectionViewDataSource
override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(Identifiers.CellIdentifier.rawValue, forIndexPath: indexPath) as Cell
cell.backgroundColor = UIColor.redColor()
return cell
}
override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
println("ip = \(indexPath.item)")
var supplementaryView = collectionView.dequeueReusableCellWithReuseIdentifier(Identifiers.HeaderIdentifier.rawValue, forIndexPath: indexPath) as UICollectionReusableView
supplementaryView.backgroundColor = UIColor.blueColor()
return supplementaryView
}
这是我的自定义布局:
class ALayout: UICollectionViewLayout {
override func prepareLayout() {
super.prepareLayout()
}
override func collectionViewContentSize() -> CGSize {
return self.collectionView!.bounds.size
}
let itemWidth = 40
override func layoutAttributesForItemAtIndexPath(indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes! {
var attributes = UICollectionViewLayoutAttributes(forCellWithIndexPath: indexPath)
let x: Float = Float(10) * Float(indexPath.item)
let y: Float = Float(indexPath.item * itemWidth)
attributes.frame = CGRect(x: CGFloat(x), y: CGFloat(y), width: CGFloat(itemWidth), height: CGFloat(itemWidth))
return attributes
}
override func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? {
var attributes = [UICollectionViewLayoutAttributes]()
let sectionsCount = self.collectionView!.dataSource!.numberOfSectionsInCollectionView!(self.collectionView!)
for section in 0..<sectionsCount {
/// add header
attributes.append(self.layoutAttributesForSupplementaryViewOfKind(UICollectionElementKindSectionHeader, atIndexPath: NSIndexPath(forItem: 0, inSection: section)))
let itemsCount = self.collectionView!.numberOfItemsInSection(section)
for item in 0..<itemsCount {
let indexPath = NSIndexPath(forItem: item, inSection: section)
attributes.append(self.layoutAttributesForItemAtIndexPath(indexPath))
}
}
return attributes
}
override func layoutAttributesForSupplementaryViewOfKind(elementKind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes! {
var attributes = UICollectionViewLayoutAttributes(forSupplementaryViewOfKind: elementKind, withIndexPath: indexPath)
attributes.frame = CGRect(x: 0, y: 0, width: 320, height: 50)
return attributes
}
}
问题是我不明白如何正确添加节标题,这个标题的 indexPath 应该是什么。添加标题的代码中有注释。应用程序在启动时崩溃并出现错误
2014-10-21 13:06:22.793 UICollectionViewLayout-Demo[3805:95924] *** Terminating app due to
uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of
kind: UICollectionElementKindCell with identifier Header - must register a nib or a class for
the identifier or connect a prototype cell in a storyboard'
我明白,这是因为单元格具有与我要添加的节标题相同的 indexPath,但标题的 indexPath 应该是什么?或者也许我做的完全错了?
提前谢谢你。
最佳答案
你的崩溃是因为你正在使用
var supplementaryView = collectionView.dequeueReusableCellWithReuseIdentifier(Identifiers.HeaderIdentifier.rawValue, forIndexPath: indexPath) as UICollectionReusableView
尝试使页眉和页脚出队(在 collectionView:viewForSupplementaryElementOfKind
中)。将其更改为
var supplementaryView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier:Identifiers.HeaderIdentifier.rawValue, forIndexPath: indexPath) as UICollectionReusableView
应该摆脱崩溃,所以你可以调查 indexPath。但在我的测试中,indexPath 始终只是“0”。
关于ios - 使用自定义 UICollectionViewLayout 的 UICollectionView 中的部分标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26485349/
我关注了这个 Custom Collection View Layout tutorial从 raywenderlich.com 使用 xcode 8 和 swift 3。 当我在实现教程中要求的所有
假设您有一个带有普通自定义 UICollectionViewLayout 的 UICollectionView。 就是这样 >>> 不是 UICollectionViewLayoutAttribut
谁能指出我如何使用 UICollectionViewLayout 创建类似于 Pinterest 列布局的界面的正确方向? 我尝试在网上搜索,但似乎还没有很多例子。 最佳答案 1000memories
我正在尝试配置 Collection View 以在附图中显示以下自定义布局: 。本质上,我希望能够配置我的 Collection View ,使其看起来基于行而不是列。例如: 第 1 行:3 个大小
在UICollectionView中做这样的UICollectionViewLayout是真的吗?请给我一些想法,我该怎么做? 最佳答案 您可以使用 iCarousel ,用于此目的的第三方自定义控件
当我在没有自定义布局对象的情况下实现 UICollectionView 时,所有 16 个可重用单元格都会出现。也就是说,我有 1 个部分,该部分中有 16 个项目。当我创建自定义布局对象时,仅显示
我目前正在使用完全用 Swift 编码的 TreeMap 框架布局:https://github.com/yahoo/YMTreeMap 我创建了自己的 Layout 类,以便像这样自定义单元格: i
正如标题所说,我需要一个 uicollectionview,它能够如图所示在两个方向上分页。 每个方 block 都是ios屏幕,箭头表示允许分页的地方。 UICollectionViewFlowLa
我有两个单元格尺寸小(间距和插入前大约一半屏幕宽度)和大(插入前全屏宽度),这两种尺寸可以在下图中看到。 我希望 UICollectionView 根据给定的大小属性自动调整这些单元格的大小。我已经设
我正在尝试以编程方式设置 UICollectionViewLayout。我正在使用 UICollectionView,也没有使用 Storyboard,也没有设置其约束。 我关注了Ray Wender
我正在使用 UICollectionView 并尝试使用 UICollectionViewLayout 方法来调整单元格的大小,但它们从未被调用过。这些方法是: sizeForItemAtIndexP
我需要准备一个像 IOS spring board 这样的布局,即水平滚动的网格,启用分页,最重要的是单元格应该按行而不是按列排列(在第二张图片中)。我尝试使用 UICollectionViewFlo
我想从数据源中获取所有数据——包括可见的和不可见的单元格——以便计算可见单元格的属性。 collectionView:cellForItemAtIndexPath: 不起作用,因为它为不可见的单元格返
我正在尝试转换以下内容,但不断出现以下错误。 我正在尝试实现以下的 objective c 版本,效果很好: LSSwipeToDeleteCollectionViewLayout 是 UIColle
我已经实现了我自己的从 UICollectionViewLayout 子类化的集合 View 布局。在 prepare我计算和缓存布局属性。 在 layoutAttributesForElements
请帮我解决这个问题,我正在关注这个tutorial要制作自定义 UICollectionViewLayout,用户可以水平滑动以浏览各个部分,垂直滑动以显示项目。 我的问题是,我只希望用户在 UICo
我正在制作一个自定义 UICollectionViewLayout 类进行练习,本质上是尝试重现单元格无限水平布局的水平流布局。 一切都与我的 prepare() 和 layoutAttributes
我对 UICollectionViewLayout 进行了子类化以创建日历。我想让用户能够更改一些设置,例如屏幕上显示的天数(默认为 7)。 我将daysToShow保存在UserDefaults中。
我想使用具有自定义布局的 UICollectionView,其中集合的部分水平滚动,部分中的项目垂直滚动。 目前,我正在使用 UICollectionView,然后使用具有自己的 Collection
我正在将我的应用程序从 Obj-C 转换为 Swift。 我有 UICollectionViewLayout 的子类,它覆盖了已重命名为“prepare”的“prepareForLayout”。到目前
我是一名优秀的程序员,十分优秀!