我需要创建一个 CGSize 来计算任意长度的任意文本的文本高度。UIKit 有这个很好的方法 -sizeWithFont:constrainedToSize: 我的文本只在宽度上受到限制,但在高度上没有。
为此,我需要为高度设置最大可能的 CGFloat。
有没有像“CGFloatMax”这样的常数?
我需要创建一个 CGSize 来计算任意长度的任意文本的文本高度。UIKit 有这个很好的方法 -sizeWithFont:constrainedToSize: 我的文本只在宽度上受到限制,但在高度上没有。
为此,我需要为高度设置最大可能的 CGFloat。
有没有像“CGFloatMax”这样的常数?
对于那些使用 Swift 2 的人,你应该使用:
CGFloat.max
对于那些使用 Swift 3 的人,你应该使用:
CGFloat.greatestFiniteMagnitude
请注意,CGFloat.max
在 Swift 3 发布时已将其删除,如文档中所反映的那样。
CGGeometry defines:
#define CGFLOAT_MAX FLT_MAX
How about CGFLOAT_MAX
?
I was looking for a Swift version of minimum CGFloat value and landed here, if you too ;) then here is the answer:
CGFloat.leastNormalMagnitude
A CGFloat
is just a float
so you can safely use FLT_MAX
from <float.h>
.
EDIT: As others have now pointed out it looks like CGFLOAT_MAX
is already defined for you so you should use that for consistency rather than FLT_MAX
, even though they are the same thing on 32 bit platforms.
这更像是评论而不是答案,但是我目前没有足够的声誉发表评论。
我刚刚遇到了使用 CGFLOAT_MAX 的意外行为:在运行 iOS 7.1.2 并使用 Xcode 5.1.1 的 iPhone 5S(64 位)设备上,以下代码:
CGFloat numRot = floorf(CGFLOAT_MAX / 360.0);
NSLog(@"numRot = %.2f", numRot);
输出:
numRot = inf
而这段代码:
CGFloat numRot = floorf(FLT_MAX / 360.0);
NSLog(@"numRot = %.2f", numRot);
正确输出:
numRot: 945228740662580166143622731901435904.00
我命令+单击 CGFLOAT_MAX,Xcode 将我带到 CoreGraphics 框架 CGBase.h 文件,其中包含以下宏定义:
# define CGFLOAT_MAX DBL_MAX
我命令+单击 CGFloat,Xcode 将我带到同一文件中的另一行:
typedef CGFLOAT_TYPE CGFloat;
然后我命令+单击 CGFLOAT_TYPE 并跳转到 #define 行:
#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
...
因此,出于某种原因,我的 CGFloat 变量应该是一个双精度变量,但是它似乎是一个浮点数,当它被分配一个双精度值(即 CGFLOAT_MAX)时会溢出。据我所知,这个 Apple 文档页面表明使用 %f 和 NSLog 应该打印双精度 - 如果这是错误的,请有人纠正我。
综上所述,如果 FLT_MAX 适用于您的情况,您现在可能要坚持使用它而不是 CGFLOAT_MAX,特别是如果您依赖一个专门接受浮点参数而不是双精度或 CGFloat 的库。
CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);
宽度 = 0.0000000000000000000000000000000000000117549435,高度 = 3.40282347E+38
在 Swift 3.0 中,您还可以使用 CGFloat(FLT_MAX),特别是如果您想在 zIndex 等其他情况下使用它,其中 CGFloat.greatestFiniteMagnitude 将超出范围。