首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UICollectionViewFlowLayout minimumInteritemSpacing错误?

UICollectionViewFlowLayout minimumInteritemSpacing错误?
EN

Stack Overflow用户
提问于 2013-01-30 21:23:45
回答 2查看 3.6K关注 0票数 1

纠结了许久之后,我开始怀疑UICollectionViewFlowLayout的空格代码中有一个bug。

问题很简单:我有五个按钮想要显示在屏幕上,我希望按钮之间的间距是1pt(在视网膜显示器上是2像素)。为了实现这一点,我将minimumInteritemSpacing设置为1.0,将单元格宽度设置为159.5磅,这样两个单元格的总和将达到319pt,为空间留出一个点。当我想要第三个按钮是视图的全宽时,问题就出现了,因为flow布局导致间距为0.5pt,尽管我被告知要保持最小的1.0。(见屏幕截图1)

设置间距的代码发生在

代码语言:javascript
复制
-(void)viewDidLoad
{
    UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)[[self collectionView] collectionViewLayout];
    [flowLayout setMinimumInteritemSpacing:1.0];
    [flowLayout setMinimumLineSpacing:1.0];        
}

以及细胞的大小

代码语言:javascript
复制
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 2) {
        return CGSizeMake(320 ,151);
    }
    return CGSizeMake(159.5, 151);
}

另一方面,如果我没有使第三个按钮全宽,那么间距就会按预期的方式工作,尽管它不应该影响不同行的项目间间距。(屏幕截图2)

应该注意的是,CollectionView、CollectionViewCell和UILabel都是在故事板中设置的,并且我已经确保截图中可见标签的边框小于单元格的宽度,我也尝试完全删除标签,但效果相同。

我不明白为什么会发生这种情况,除非它是流布局代码中的错误,并且在将其作为错误提交之前,我在这里寻找一个健全的检查。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-01 18:55:12

正如评论中提到的,必须在这里描述问题,再加上后来的一些思考,这让我意识到尽管minimumInteritemSpacing是一个CGFloat,但传递给它小数值是没有意义的,而且当你这样做时,它的行为是未定义的。这是因为,在点对像素比率为1:1的设备上,没有半个像素这样的东西。碰巧的是,在某些情况下,它的行为与我的预期不谋而合,从而使我看不到真正的(而且相当明显的)问题。

希望阅读这篇文章能帮助其他人迅速认识到这个错误。

票数 4
EN

Stack Overflow用户

发布于 2017-10-26 18:43:50

解决方案是将点值除以屏幕比例。

flowLayout.setMinimumInteritemSpacing = 1.0 / UIScreen.main.scale

该属性接受points中的值,这是屏幕像素的抽象。来自Apple文档:

对于视网膜显示器,比例因子可以是3.0或2.0,并且一个点可以分别由9个或4个像素表示。对于标准分辨率的显示器,比例因子为1.0,一个点等于一个像素。

通过将点值除以屏幕比例,您得到的CGFloat值等于设备屏幕上的1个像素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14605125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档