我有一个集合视图,它被设置为单个水平行的单元格。它抛出以下约束错误(我正在使用AutoLayout):
未定义UICollectionViewFlowLayout的行为,因为项高度必须小于UICollectionView的高度减去section insets top和bottom值,减去内容insets top和bottom值。
我用Google搜索并查看了SO,并且每个人都建议通过简单地覆盖UIScrollViewDelegate方法来修复它:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
// iPhone 6+ device width handler
CGFloat multiplier = (screenWidth > kNumberOfCellsWidthThreshold) ? 4 : 3;
CGFloat size = screenWidth / multiplier;
return CGSizeMake(size, size);
}
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
return UIEdgeInsetsMake(0, 0, 0, 0);
}
但它仍然没有用。尽管我将细胞设置为与容器相同的高度,但是细胞高度比它的容器高,这似乎是一种愚蠢的行为。这是错误的其余部分:
相关的UICollectionViewFlowLayout实例是UICollectionViewFlowLayout:0x7fa6943e7760,它附加到MyCollectionView:0x7fa69581f200; baseClass = UICollectionView;
frame =(0 0; 375 98); clipsToBounds = YES; autoresize = RM + BM; layer = CALayer:0x7fa694315a60; contentOffset:{0,0}; contentSize:{0,134}
手动将单元格设置为一个非常小的尺寸(例如size - 50.0
似乎可行,但为什么我不能将单元格大小设置为与其容器相同的高度?
答案 0 :(得分:5)
原来我的问题中遗漏的一块是UICollectionView
嵌套在UITableView
内的事实。 iOS 8引入了layoutMargins
来代替内容偏移值。
根据这个问题:iOS 8 UITableView separator inset 0 not working
我必须覆盖包含表格视图的单元格边距:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Remove seperator inset
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
// Prevent the cell from inheriting the Table View's margin settings
if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
[cell setPreservesSuperviewLayoutMargins:NO];
}
// Explictly set your cell's layout margins
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
答案 1 :(得分:0)
swift for override cell
override func awakeFromNib() {
super.awakeFromNib()
self.separatorInset = .zero
self.preservesSuperviewLayoutMargins = false
self.layoutMargins = .zero
}