flooris for double(与 相同CGFloat)和floorfis for float(意味着它需要float参数)。这来自 ol' C 的东西。由于您使用CGFloat坚持使用floor. 但是,以防万一,我会增加一点容忍度,所以将其更改为例如
CGFloat rows = floor ( ( maximumHeight + 0.5 ) / rowHeight );
假设这些值始终严格为正。
通常,您会将行数转换为整数,但由于您使用它计算 UI 高度,因此也将使用它,因为CGFloat此处无需使用整数。(请注意,如果您正在观看CGFloat,float那么您会想要使用floorf但 FWIW 在许多架构上floor并且floorf是相同的)。
不确定这是否是困扰您的问题,但 floor 会向下舍入到最接近的 int。因此,如果您有例如 100 个像素可用并且您希望一行有 20 个像素,那么您将拥有
100 / 20 = 5
行。如果你希望它是 21 像素怎么办?然后
100 / 21 = 4.76
现在你需要做出决定。如果要在此处插入 4 行,则使用floor以来
floor ( 4.7 ) = 4.0
请注意,由于您仅使用 4 行,因此每行的高度将为
100 / 4 = 25
像素,比你希望的 21 多一点(因为你使用的行更少)。
如果您想使用 5 行,则使用ceilor 天花板,因为
ceil ( 4.7 ) = 5.0
在这里请注意,由于您使用更多行,因此高度将为
100 / 5 = 20
像素。因此,如果您希望的 21 是您在此特定示例中使用的最大值。ceil如果它是最小值,您同样会使用floor.
有时你可能会得到有趣和意想不到的值,比如
100 / 20 = 4.999999999
这就是为什么我会增加一点容忍度。