floor
is for double
(与 相同CGFloat
)和floorf
is 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 行,则使用ceil
or 天花板,因为
ceil ( 4.7 ) = 5.0
在这里请注意,由于您使用更多行,因此高度将为
100 / 5 = 20
像素。因此,如果您希望的 21 是您在此特定示例中使用的最大值。ceil
如果它是最小值,您同样会使用floor
.
有时你可能会得到有趣和意想不到的值,比如
100 / 20 = 4.999999999
这就是为什么我会增加一点容忍度。