UIKit
не любит значения с более чем двумя десятичными знаками, округляет их или сделает это за вас.
Здесь UICollectionViewFlowLayout
округляет размер ячейки и начинает заполнять строки знаком "interitemspacing ", по крайней мере, равен указанному вами minimumInteritemSpacing
.В последней строке он использовал в точности значение minimumInteritemSpacing
и не полностью заполняет строку.
Исправьте его, используя лучшие округленные значения, создавая иллюзию, что все идеально выровнено.
Я обычно использую эти расширения:
extension CGFloat {
func xx_rounded(_ rule: FloatingPointRoundingRule = .down, toDecimals decimals: Int = 2) -> CGFloat {
let multiplier = CGFloat(pow(10.0, CGFloat(decimals))
return (self * multiplier).rounded(.down) / multiplier
}
}
extension CGSize {
func xx_rounded(rule: FloatingPointRoundingRule = .down, toDecimals: Int = 2) -> CGSize {
return CGSize(
width: width.xx_rounded(rule, toDecimals: toDecimals),
height: height.xx_rounded(rule, toDecimals: toDecimals)
)
}
}
Изменение:
return CGSize(width: cellWidth, height: height)
на
return CGSize(width: cellWidth, height: height).xx_rounded()