相关疑难解决方法(0)

iOS 10中的collectionViewContentSize使用自调整单元格

在iOS 10之前,我有一个自我调整表视图,它只包含一个UICollectionView,其中包含使用标准UICollectionViewFlowLayout的自调整单元格.使用自动布局调整集合视图单元格的大小.为了使表格单元格正确调整大小,我必须找到集合视图的内容大小,并在表格单元格的systemLayoutSizeFittingSize中使用它:withHorizo​​ntalFittingPriority:verticalFittingPriority:.

我还发现对collectionView.collectionViewLayout.collectionViewContentSize的调用使用了estimatedItemSize而不是正确大小的单元格大小,除非我调用了collectionView layoutIfNeeded.这导致systemLayoutSizeFittingSize:

- (CGSize) systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority
{
    self.collectionView.frame = CGRectMake(0, 0, targetSize.width, FLT_MAX);
    [self.collectionView layoutIfNeeded];

    CGSize collectionViewContentSize = self.collectionView.collectionViewLayout.collectionViewContentSize;
    CGFloat verticalPadding = fabs(self.collectionViewTopPaddingConstraint.constant) + fabs(self.collectionViewBottomPaddingConstraint.constant);
    CGSize cellSize = CGSizeMake(collectionViewContentSize.width, collectionViewContentSize.height + verticalPadding);

    return cellSize;
}
Run Code Online (Sandbox Code Playgroud)

对layoutIfNeeded的调用现在导致了 *** Assertion failure in -[_UIFlowLayoutSection computeLayoutInRect:forSection:invalidating:invalidationContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UIFlowLayoutSupport.m:823

我是否通过在systemLayoutSizeFittingSize中调用layoutIfNeeded来违反某些道德规则?在使用自定义单元格时,是否有更好的方法来计算集合视图的内容大小?我宁愿不必从自动布局转移到代码中进行这些大小计算,但这肯定是最糟糕的选择.

objective-c ios uicollectionview ios10

9
推荐指数
2
解决办法
3411
查看次数

使用具有 UICollectionView 和 FlowLayout 的单元格滚动 UITableView 时,应用程序崩溃

该应用程序是使用 Xcode 7.3.1 以 Swift 2.2 编写的。

我有一个带有水平的UITableView单元格。当我非常快速地上下滚动表格视图并且不让它在设备(iPad Air 2,iOS 9.3.2)或模拟器上停止时,应用程序崩溃UICollectionViewFlowLayout

 EXC_BAD_ACCESS
Run Code Online (Sandbox Code Playgroud)

在 AppDelegate 中。

该应用程序未达到在视图控制器中设置的断点didReceiveMemoryWarning()

似乎代码崩溃了

[UICollectionViewData invalidateItemsAtIndexPaths:]
Run Code Online (Sandbox Code Playgroud)

或者

[_UIFlowLayoutSection computeLayoutInRect:forSection:invalidating:]
Run Code Online (Sandbox Code Playgroud)

其次是

0_dispatch_barrier_async_f_slow.
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪不会将我指向任何应用程序代码行。

模拟器的控制台堆栈跟踪(在设备上崩溃时没有控制台堆栈跟踪):

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[_UIFlowLayoutItem frame]: unrecognized selector sent to class 0x110f9ecc0'
*** First throw call stack:
(
0   CoreFoundation                      0x000000011259cd85 __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x00000001137d3deb objc_exception_throw + 48
2   CoreFoundation                      0x00000001125a5c3d +[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3   CoreFoundation                      0x00000001124ebcfa ___forwarding___ + 970 …
Run Code Online (Sandbox Code Playgroud)

uitableview ios uicollectionview swift

5
推荐指数
1
解决办法
1760
查看次数

标签 统计

ios ×2

uicollectionview ×2

ios10 ×1

objective-c ×1

swift ×1

uitableview ×1