我有具有自定义流程布局的集合视图,我想知道为什么我会有这样的额外空间(右侧):

ios - uicollectionview怪异的差距-LMLPHP

虽然在这里可能很难注意到,但是您可能会在右侧和单元格之间看到灰色间隙。

这是我如何覆盖标准集合视图流布局以消除水平差距的方法:

@implementation CalendarFlowLayout

- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect {
    NSArray *answer = [super layoutAttributesForElementsInRect:rect];
    NSLog(@"layout blck passed");
    for(int i = 1; i < [answer count]; ++i) {
        UICollectionViewLayoutAttributes *currentLayoutAttributes = answer[i];
        UICollectionViewLayoutAttributes *prevLayoutAttributes = answer[i - 1];
        NSInteger maximumSpacing = 0;
        NSInteger origin = CGRectGetMaxX(prevLayoutAttributes.frame);

        if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width) {
            CGRect frame = currentLayoutAttributes.frame;
            frame.origin.x = origin + maximumSpacing;
            currentLayoutAttributes.frame = frame;
        }
    }
    return answer;
}

@end


像元大小计算如下:

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath{


    return CGSizeMake(SCREEN_WIDTH/7, (SCREEN_HEIGHT-NAVBAR_HEIGHT-STATUS_BAR_HEIGHT)/6);
}


上面的宏看起来像这样:

#define SCREEN_WIDTH  [[UIScreen mainScreen] bounds].size.width


它已经过测试,并且返回正确的输出。

另外,如果我将宽度设置为SCREEN_WIDTH / 3,则不会有间隙。

如何删除?为什么会这样呢?

最佳答案

375/3
= 125

375/7
= 53.57142857142857

您无法真正点亮半个像素,因此它可能会向下舍入,从而留下空白。确保您的大小是子视图大小的倍数(如果不是,请向最右边的对象添加一个像素)。

关于ios - uicollectionview怪异的差距,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38330238/

10-10 20:48