- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用像这样的自定义 UICollectionViewLayout :
override func prepareLayout() {
cache.removeAll(keepCapacity: false)
let standardHeight = LayoutConstants.Cell.standardHeight
let featuredHeight = LayoutConstants.Cell.featuredHeight
var frame = CGRectZero
var y: CGFloat = 0
for item in 0..<numberOfItems {
let indexPath = NSIndexPath(forItem: item, inSection: 0)
let attributes = UICollectionViewLayoutAttributes(forCellWithIndexPath: indexPath)
let cell = collectionView!.cellForItemAtIndexPath(indexPath)
/* Important because each cell has to slide over the top of the previous one */
attributes.zIndex = item
/* Initially set the height of the cell to the standard height */
var height = standardHeight
if indexPath.item == featuredItemIndex {
/* The featured cell */
let yOffset = standardHeight * nextItemPercentageOffset
y = collectionView!.contentOffset.y - yOffset
height = featuredHeight
} else if indexPath.item == (featuredItemIndex + 1) && indexPath.item != numberOfItems {
/* The cell directly below the featured cell, which grows as the user scrolls */
let maxY = y + standardHeight
height = standardHeight + max((featuredHeight - standardHeight) * nextItemPercentageOffset, 0)
y = maxY - height
}
frame = CGRect(x: 0, y: y, width: width, height: height)
attributes.frame = frame
cache.append(attributes)
y = CGRectGetMaxY(frame)
}
}
/* Return all attributes in the cache whose frame intersects with the rect passed to the method */
override func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? {
var layoutAttributes = [UICollectionViewLayoutAttributes]()
for attributes in cache {
if CGRectIntersectsRect(attributes.frame, rect) {
layoutAttributes.append(attributes)
}
}
return layoutAttributes
}
这是我想要的,但如果我想插入其他项目,我的应用程序会因此错误而崩溃:
2015-05-31 22:37:29.032 Flore-Jessy[15359:717220] *** Assertion failure in -[UICollectionViewData layoutAttributesForItemAtIndexPath:], /SourceCache/UIKit_Sim/UIKit-3347.44/UICollectionViewData.m:694
2015-05-31 22:37:29.077 Flore-Jessy[15359:717220] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'no UICollectionViewLayoutAttributes instance for -layoutAttributesForItemAtIndexPath: <NSIndexPath: 0x7b952a70> {length = 2, path = 0 - 15}'
*** First throw call stack:
(
0 CoreFoundation 0x00a0a746 __exceptionPreprocess + 182
1 libobjc.A.dylib 0x02867a97 objc_exception_throw + 44
2 CoreFoundation 0x00a0a5da +[NSException raise:format:arguments:] + 138
3 Foundation 0x01093720 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 118
4 UIKit 0x01de5c74 -[UICollectionViewData layoutAttributesForItemAtIndexPath:] + 461
5 UIKit 0x01dafbe7 __51-[UICollectionView _viewAnimationsForCurrentUpdate]_block_invoke1382 + 161
6 UIKit 0x01dad73b -[UICollectionView _viewAnimationsForCurrentUpdate] + 4789
7 UIKit 0x01db0eb8 -[UICollectionView _updateWithItems:tentativelyForReordering:] + 2447
8 UIKit 0x01dabf0d -[UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:] + 14802
9 UIKit 0x01da8536 -[UICollectionView _endItemAnimationsWithInvalidationContext:] + 48
10 UIKit 0x01da82ed -[UICollectionView _updateRowsAtIndexPaths:updateAction:] + 374
11 UIKit 0x01da833f -[UICollectionView insertItemsAtIndexPaths:] + 48
12 Flore-Jessy 0x0009183c _TFC11Flore_Jessy22TimelineViewController13viewDidAppearfS0_FSbT_ + 556
13 Flore-Jessy 0x000918cf _TToFC11Flore_Jessy22TimelineViewController13viewDidAppearfS0_FSbT_ + 63
14 UIKit 0x017f3245 -[UIViewController _setViewAppearState:isAnimating:] + 629
15 UIKit 0x017f3860 -[UIViewController __viewDidAppear:] + 171
16 UIKit 0x017f3b2b -[UIViewController _endAppearanceTransition:] + 322
17 UIKit 0x0180bd4e -[UIViewController(UIContainerViewControllerProtectedMethods) endAppearanceTransition] + 41
18 UIKit 0x017c403b -[UIPresentationController transitionDidFinish:] + 839
19 UIKit 0x01e50109 -[_UIFullscreenPresentationController transitionDidFinish:] + 59
20 UIKit 0x017c6c11 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke_2 + 165
21 UIKit 0x01ef444a -[_UIViewControllerTransitionContext completeTransition:] + 124
22 Flore-Jessy 0x0008e174 _TFFC11Flore_Jessy29SwipeBluredTransitionAnimator17animateTransitionFS0_FPSo36UIViewControllerContextTransitioning_T_U0_FSbT_ + 436
23 Flore-Jessy 0x0008ca34 _TPA__TFFC11Flore_Jessy29SwipeBluredTransitionAnimator17animateTransitionFS0_FPSo36UIViewControllerContextTransitioning_T_U0_FSbT_ + 68
24 Flore-Jessy 0x0008e1bc _TTRXFo_dSb_dT__XFo_iSb_iT__ + 28
25 Flore-Jessy 0x0008caea _TPA__TTRXFo_dSb_dT__XFo_iSb_iT__ + 90
26 Flore-Jessy 0x0008e1f7 _TTRXFo_iSb_iT__XFo_dSb_dT__ + 39
27 Flore-Jessy 0x0008cb9e _TPA__TTRXFo_iSb_iT__XFo_dSb_dT__ + 78
28 Flore-Jessy 0x0008e245 _TTRXFo_dSb_dT__XFdCb_dV10ObjectiveC8ObjCBool_dT__ + 69
29 UIKit 0x017149be -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 318
30 UIKit 0x016f81b2 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 206
31 UIKit 0x016f8522 -[UIViewAnimationState animationDidStop:finished:] + 80
32 QuartzCore 0x0154a571 _ZN2CA5Layer23run_animation_callbacksEPv + 307
33 libdispatch.dylib 0x02f59bef _dispatch_client_callout + 14
34 libdispatch.dylib 0x02f3f6bb _dispatch_main_queue_callback_4CF + 993
35 CoreFoundation 0x009638ee __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 14
36 CoreFoundation 0x009215f0 __CFRunLoopRun + 2256
37 CoreFoundation 0x00920a5b CFRunLoopRunSpecific + 443
38 CoreFoundation 0x0092088b CFRunLoopRunInMode + 123
39 GraphicsServices 0x051e02c9 GSEventRunModal + 192
40 GraphicsServices 0x051e0106 GSEventRun + 104
41 UIKit 0x0168a106 UIApplicationMain + 1526
42 Flore-Jessy 0x00080a24 main + 180
43 libdyld.dylib 0x02f84ac9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
这是我用来插入新项目的代码
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if let post = newPost {
collectionView!.insertItemsAtIndexPaths([dataSource.indexPathForNewPost(post)])
}
}
/// Return the new indexPath for the TimelineItem
func indexPathForNewPost(item: TimelineItem) -> NSIndexPath {
if let liste = listPosts {
listPosts!.append(item)
}
return indexPathForPost(item)
}
func indexPathForPost(item: TimelineItem) -> NSIndexPath {
var itemIndex = 0
for (index, currentTimelineItem) in enumerate(allPosts()) {
if currentTimelineItem === item {
itemIndex = index
break
}
}
return NSIndexPath(forItem: itemIndex, inSection: 0)
}
有什么想法吗?
最佳答案
根据错误消息,这是因为单元格无法检索 layoutAttributes。layoutAttributesForItemAtIndexPath
如果更新创建的单元格不可见,则返回 nil。
要修复此错误,请覆盖 layoutAttributesForItemAtIndexPath
方法:
override func layoutAttributesForItemAtIndexPath(indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? {
return cache[indexPath.row]
}
SWIFT 3 -
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
return cache[indexPath.row]
}
关于ios - 使用自定义 UICollectionViewLayout 时出现“-layoutAttributesForItemAtIndexPath 没有 UICollectionViewLayoutAttributes 实例”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562493/
我正在尝试构建一个带有分页的 Collection View (将单元格显示为预览)并发现 this教程。我从 Xcode 收到错误,猜测这一定是由于 Xcode 更新所致(因为该教程似乎对很多人都有
我想在不重新加载或更改布局对象的情况下更改一个 UICollectionViewCell 的 UICollectionViewLayoutAttributes 属性 我做了 UICollectionV
我最近开始使用很棒的 UICollectionView API,取得了合理的进展,但几乎一整天都被一个问题困住了,我希望有人能帮助我: 我需要向某些单元格的属性添加一些自定义详细信息。为了做到这一点,
我正在尝试对 UICollectionViewLayoutAttributes 进行子类化,以便我可以添加一个额外的属性 points(CGPoints 数组)。 该子类被设计为仅用作装饰 View
我的 ios 应用程序崩溃,但出现以下异常: void HandleExceptions(NSException *__strong):875 ERROR: uncaught exception: n
我已将 UICollectionViewLayoutAttributes 类子类化并添加了一些自定义属性。 在我的自定义 UICollectionViewLayout 类中,我覆盖了静态+ (Clas
标题是我遇到的错误,我不知道为什么,但这里有一些信息,希望这里有人可以解释我。 我已经对 UICollectionViewFlowLayout 进行了子类化,因为这可以让我在 prepareLayou
我正在阅读一个使用 swift 的开源项目的一些代码。这里我遇到了代码[CGFloat: [UICollectionViewLayoutAttributes]](),我不明白代码的用法,我什至不知道如
我试图了解 UICollectionViewLayout 的工作原理并找到了这个示例代码。 https://developer.apple.com/documentation/uikit/uicoll
我想在 UICollectionViewLayout 中执行转换动画。好吧,这很容易实现,但我找不到设置 UICollectionViewLayoutAttributes 的 anchorPoint
我只是找不到如何在自定义单元格的 apply() 方法中访问自定义布局属性。 我必须为我的 CollectionViewLayoutAtrributes 实现自定义布局属性,因此我将它们子类化。到目前
我对 UICollectionViewFlowLayout 进行了子分类,在该子类中,我正在更改 UICollectionViewLayoutAttributes 框架,以便它们看起来更大或更小 -
我想要达到的效果是一种粘性标题单元格。粘性细胞漂浮在其他细胞之上对我来说很重要。有点像这样: ┌──────────┐ │ │ │ Cell 0 │ │ ├┐
我有两个自定义 UICollectionViewLayout 对象,它们使用自定义 UICollectionViewLayoutAttributes 子类。这些自定义属性添加了一个属性 tintAlp
我已经使用 CustomLayout 在 CollectionView 中完成了一个 View 。在 iOS6 中它运行得很好,但在 iOS7 中它抛出了这样的异常。 由于未捕获的异常“NSInter
声明变量时出现问题。这就是我的情况。 let att = UICollectionViewLayoutAttributes(layoutAttributesForItem(at: in
我有一个 UICollectionViewFlowLayout 的子类,我已经定义了 layoutAttributesForElementsInRect 方法 在里面我试图制作一个 NSMutable
我有一个带有自定义 UICollectionLayout 的 UICollectionView。一切正常,直到我尝试插入一行…… 然后我收到以下错误,似乎无法弄清楚如何解决它。 *** Termina
我正在使用像这样的自定义 UICollectionViewLayout : override func prepareLayout() { cache.removeAll(keepCa
我们有以下代码在 Swift 3 中不再工作,但在以前的 Swift 版本中工作。在代码行 array += [attributes] 中,我们收到错误“Binary Operator '+=' ca
我是一名优秀的程序员,十分优秀!