【发布时间】:2014-10-05 13:46:30
【问题描述】:
由于 iOS 8 [UIColletionViewCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize] 返回高度为 0 的大小。
代码的作用如下:
为了确定 iOS 7 中 UICollectionView 中单元格的大小,我在使用自动布局的 xib 文件中定义的单元格上使用 systemLayoutSizeFittingSize:。大小取决于UILabel 的字体大小,它是我的xib 文件中UICollectionViewCell 的子视图。标签的字体设置为UIFontTextStyleBody。所以基本上单元格的大小取决于 iOS 7 中的字体大小设置。
这是代码本身:
+ (CGSize)cellSize {
UINib *nib = [UINib nibWithNibName:NSStringFromClass([MyCollectionViewCell class]) bundle:nil];
// Assumption: The XIB file only contains a single root UIView.
UIView *rootView = [[nib instantiateWithOwner:nil options:nil] lastObject];
if ([rootView isKindOfClass:[MyCollectionViewCell class]]) {
MyCollectionViewCell *sampleCell = (MyCollectionViewCell*)rootView;
sampleCell.label.text = @"foo"; // sample text without bar
[sampleCell setNeedsLayout];
[sampleCell layoutIfNeeded];
return [sampleCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
}
return CGSizeZero;
}
它在 iOS 7 中运行良好,但在 iOS 8 中却不行。不幸的是,我不知道为什么。
如何在 iOS 8 中获取 UICollectionViewCells 的自动布局大小?
PS:使用
return [sampleCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
而不是
return [sampleCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
正如有人可能建议的那样,没有任何区别。
【问题讨论】:
-
我有同样的问题:在 iOS 7 [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height 返回正确的大小:在 iOS 8 上始终为 0。我发现这是使用 iOS7 或 iOS 8 SDK 构建的。抱歉,我还帮不上忙,但很高兴我不是唯一的一个!我已经提交了这个雷达:17959753
-
我也有同样的问题。我整天都在玩它,找不到解决方案。将其更改为 collectionViewCell.contentView 没有帮助。
-
我遇到了同样的问题,实验表明它可能与通过界面生成器添加的约束有关,这些约束是针对单元格视图而不是 cell.contentView。使用针对 contentView 的代码添加约束部分解决了这个问题
-
@AlexLittlejohn 它的 UICollectionViewCells IB 隐藏了内容视图,而 UITableViewCells 则没有,这使得很难知道在哪里创建了约束。就像问题中所说的 maremmle 一样, [sampleCell.contentView systemLayoutSizeFittingSize:...] 在表格视图单元格中工作。奇怪的是,它在 iOS 8 上肯定被破坏/更改了,因为在 iOS 8 设备上使用任一 SDK 构建都会失败。
-
@AlexLittlejohn 部分解决是什么意思?高度是否返回非零?
标签: ios objective-c autolayout ios8