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

ios - 四舍五入集合 View 的浮点值时出错-LMLPHP

我为此使用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
ios - 四舍五入集合 View 的浮点值时出错-LMLPHP

最佳答案

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

例如,您的collectionViewWidth ==320。单元格== 320/7 == 45.7142857,U仅应使用collectionViewWidth == 322,因为单元格== 46,您的问题得以解决。

认为增加不是很明显collectionViewWidth U有两个选择

  • 首先,如果您collectionViewWidth == screenWidth,则只需对齐中心,边缘将隐藏在屏幕限制范围之外
  • 其次,如果您collectionViewWidth

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

  • 10-09 15:57