我想从左到右排列单元格。所以我使用UICollectionViewFlowLayout
:
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
// use this for let cell width fit for label width
layout.estimatedItemSize = CGSizeMake(80, 30);
self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
单元格的宽度适合标签的宽度:
// cell code
@implementation CQGoodsSearchCell
- (void)setupUI {
self.contentView.layer.cornerRadius = 15;
self.contentView.layer.masksToBounds = YES;
self.contentView.backgroundColor = [UIColor colorWithRed:1.00 green:1.00 blue:1.00 alpha:1.00];
self.nameLabel = [[UILabel alloc] init];
[self.contentView addSubview:self.nameLabel];
self.nameLabel.font = [UIFont systemFontOfSize:15];
self.nameLabel.textColor = [UIColor colorWithRed:0.18 green:0.18 blue:0.18 alpha:1.00];
[self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(30);
make.top.bottom.mas_offset(0);
make.left.mas_offset(10);
make.right.mas_offset(-10);
}];
}
一个细胞以上时,一切都会顺利进行:
但是,只有一个单元格时,该单元格位于中心:
如果我使用itemSize
而不是estimatedItemSize
,就可以了:
layout.itemSize = CGSizeMake(80, 30);
对此我真的很困惑。将单元格置于集合视图的中心不是我想要的,但我也想使用“自动布局”,以便单元格的宽度自行调整。
那么有什么办法可以避免这种情况?
答案 0 :(得分:4)
答案 1 :(得分:1)
基本上,这是我在这里讨论的相同问题:
https://stackoverflow.com/a/52428617/341994
总而言之,您要使用的功能自动调整尺寸的收藏视图单元格无效,并且从未使用过。就像您正确说的那样,这就是为什么
如果我使用
itemSize
而不是estimatedItemSize
,就可以了
是的!这不是您的错误;这是一个iOS错误。自定义尺寸的收集视图单元不起作用。应用程序崩溃或流布局不正确。
这就是解决方案。请勿使用estimatedItemSize
。而是自己计算正确的大小,并在
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
// calculate/obtain correct size and return it
}
答案 2 :(得分:0)
此外,使用自定义$(document).ready(function(){
$(".filter-button").click(function(){
var value = $(this).attr('data-filter');
if(value == "all")
{
//$('.filter').removeClass('hidden');
$('.filter').show('1000');
}
else
{
// $('.filter[filter-item="'+value+'"]').removeClass('hidden');
// $(".filter").not('.filter[filter-item="'+value+'"]').addClass('hidden');
$(".filter").not('.'+value).hide('3000');
$('.filter').filter('.'+value).show('3000');
}
});
if ($(".filter-button").removeClass("active")) {
$(this).removeClass("active");
}
$(this).addClass("active");
});
可以解决此问题:
对于Objective-C:
UICollectionViewLayout
对于Swift:
@interface CQLeftSideLayout : UICollectionViewFlowLayout
@end
@implementation CQLeftSideLayout
- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
if (attributes.count == 1) {
UICollectionViewLayoutAttributes *currentAttributes = attributes.firstObject;
currentAttributes.frame = CGRectMake(self.sectionInset.left, currentAttributes.frame.origin.y, currentAttributes.frame.size.width, currentAttributes.frame.size.height);
}
return attributes;
}
@end