Uicollectionview奇怪的差距

时间:2016-07-12 13:25:55

标签: ios objective-c uicollectionview

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

enter image description here

但这里可能很难注意到,但你可能会看到右侧和细胞之间存在灰色差距。

以下是我如何覆盖标准集合视图流布局以删除水平间隙:

@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,则没有间隙。

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

2 个答案:

答案 0 :(得分:2)

375/3 = 125

375/7 = 53.57142857142857

你不能真正点亮半个像素,所以它可能会向下舍入,留下一个间隙。确保您的尺寸是子视图尺寸的倍数(或者如果不是,则向最右侧的对象添加像素)。

答案 1 :(得分:1)

问题是单元格的宽度(例如import os for root, dirs, files in os.walk('/DIRECTORY PATH HERE'): for file1 in files: if file1.endswith(".xml") and not file1.startswith("."): filePath = os.path.join(root, file1) try: with open(filePath) as f: content = f.readlines() for a in content: if "string" in a: stringOutput = a.strip() print 'i\'m here' + stringOutput except IOError: print 'No xmls found' )不是SCREEN_WIDTH/3的除数。 SCREEN_WIDTH的正确除数(375,正如你在评论中所说)是3,5,25和125(125 * 3 = 375)。

但由于所有iOS设备的屏幕尺寸不同,我认为您应该以不同的方式管理问题。例如,您应该选择特定的单元格宽度并尝试将集合视图置于其容器中心,因此额外空间将始终在集合视图的左侧和右侧进行划分。