ios - 为 Collection View 舍入浮点值时出错

标签 ios objective-c iphone uicollectionview rounding-error

我想解决我设备上的一个像素问题。我正在设计一个如下所示的日历

enter image description here

我为此目的使用 UICollectionViewCell

   - (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
   return UIEdgeInsetsMake(0,0,0,0);  // top, left, bottom, right
}

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat collectionViewWidth = (CGRectGetWidth(collectionView.frame) / 7);
    CGFloat collectionViewHeight = 48;
    return CGSizeMake(collectionViewWidth, collectionViewHeight);
}

问题是,如果我将宽度增加 0.0000001 点,那么每行绘制的单元格数量是 6 而不是 7。我也尝试增加 UIEdgeInset(增加 0.00001),但这是同样的问题。流布局的属性已适当设置。

 layout.minimumInteritemSpacing = 0.0f;
 layout.minimumLineSpacing = 0.0f;

如何在不留空隙的情况下使单元格大小一致?单元格的实际宽度为 53.571428571428569 (375/7)。如果我将该值四舍五入为 53.58,则会得到以下 View enter image description here

最佳答案

这是一个非常普遍的问题,解决它的最快方法是使用 collectionViewWidth % 7 == 0 作为单元格大小

例如你的collectionViewWidth == 320。Cell == 320/7 == 45.7142857,你应该简单地使用collectionViewWidth == 322,你的问题就解决了,因为cell == 46

增加并不明显 collectionViewWidth 你有两个选择

  • 首先,如果您的 collectionViewWidth == screenWidth,只需对齐中心,边缘就会隐藏在屏幕限制之外

  • 其次,如果您的 collectionViewWidth < screenWidth,使用 UIview 作为 collectionView 的容器,并使用 clipTobounds,边缘将隐藏在容器限制之外。

关于ios - 为 Collection View 舍入浮点值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35095255/

相关文章:

ios - 在 Swift 中更改本地通知的文本

ios - 模棱两可的追加使用?

ios - 是否可以通过 iOS 应用程序确认电话是否已接听?

ios - Appium on ios 真机报sdk iphone模拟器报错

ios - 如何仅从字符串开头删除点

iphone - 水平 ScrollView 中并排的 UIViews

ios - 每 10 秒重复 UILocalNotification 的间隔

iphone - UIImageView - 显示目录中的图像

ios - 当应用程序从重定向的应用程序重新获得焦点时的回调

ios - 在 dealloc 之前观察并删除类别中的 NSNotification