单元格之间的UICollectionView空间

时间:2017-07-12 11:13:01

标签: objective-c uicollectionview uicollectionviewcell calayer uicollectionviewlayout

在我的情况下,我想要完全删除UICollectionViewCell之间的任何空格。在iPhone 5中,它的工作正常但iPhone 6及更高版本。每次我滚动或在初始加载UICollectionView时为不同的行添加空白空间。我知道浮动值可能有所不同。例如8.88888881和8.88888881。

绿线是空格(collection view背景色)

enter image description here

enter image description here

每次我滚动此行更改位置。

我的代码:

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    CGFloat widthAndHeight = [self widthAndHeightForActiveCollectionViewItem];
    if (widthAndHeight < 22) {
        widthAndHeight = 22;
    }
    CGFloat result = lroundf(widthAndHeight * self.venueLayoutZoom);
    return CGSizeMake(result, result);
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
    return 0;
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsZero;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
    return 0;
}

对于UICollectionViewFlowLayout,我使用this,因为我需要向两个方向滚动。每次大小正确且没有任何浮动值。我总是试图修改UICollectionView宽度。例如:我在一行中有29个元素,我希望每个元素宽度为11像素。然后我将宽度设置为319.

第二个问题是: 我想创建只有正确的底部圆角的单元格,如enter image description here。但iPhone 6及以上版本再次向我显示错误的结果,例如enter image description here。 (看看这一行在上面)。我想要一个平滑的颜色。但是当我向左/向右滚动时,它可能是正常的。

UICollectionViewCell代码:

- (void)prepareForReuse
{
    [self.circularLayer removeFromSuperlayer];
}

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self allocAndAddLayers];
}

- (void)allocAndAddLayers
{
    self.circularLayer = [CALayer layer];
    [self.layer addSublayer:self.circularLayer];
}

- (void)layoutSubviews
{
    [self updateRoundedCorners];
}

- (void)updateRoundedCorners
{
   self.circularLayer.bounds = bounds;
        self.circularLayer.position = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
            CGRect rect = self.circularLayer.bounds;
            CGFloat radius = CGRectGetWidth(rect) / kVenueLayoutCellDefaultCornerRadiusDivider;
            UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corners cornerRadii:CGSizeMake(radius, radius)];
            CAShapeLayer *maskLayer = [CAShapeLayer layer];
            maskLayer.frame = bounds;
            maskLayer.path = maskPath.CGPath;
            self.circularLayer.mask = maskLayer;
}

0 个答案:

没有答案