我有自定义流程布局的集合视图,我想知道为什么我有这样的额外空间(右侧):
但这里可能很难注意到,但你可能会看到右侧和细胞之间存在灰色差距。
以下是我如何覆盖标准集合视图流布局以删除水平间隙:
@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,则没有间隙。
如何删除它?为什么会这样?
答案 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设备的屏幕尺寸不同,我认为您应该以不同的方式管理问题。例如,您应该选择特定的单元格宽度并尝试将集合视图置于其容器中心,因此额外空间将始终在集合视图的左侧和右侧进行划分。