最大CGFloat值是否有常量?

时间:2011-06-08 20:58:48

标签: objective-c ios foundation core-foundation cgfloat

我需要创建一个CGSize来计算任意长度的任意文本的文本高度。 UIKit有这个很好的方法-sizeWithFont:constrainedToSize:我的文本只受宽度限制,但不是高度。

为此,我需要为高度设置最大可能的CGFloat。

是否有类似“CGFloatMax”的常量?

8 个答案:

答案 0 :(得分:168)

对于那些使用Swift 2的人,你应该使用:

CGFloat.max

对于使用Swift 3的用户,您应该使用:

CGFloat.greatestFiniteMagnitude

请注意,当{8}}中反映出来时,CGFloat.max已被删除,如documentation所示。

答案 1 :(得分:41)

CGGeometry定义:

#define CGFLOAT_MAX FLT_MAX

答案 2 :(得分:13)

CGFLOAT_MAX怎么样?

答案 3 :(得分:5)

CGFloat只是float,因此您可以安全地使用FLT_MAX中的<float.h>

编辑:正如其他人现在指出的那样,CGFLOAT_MAX已经为你定义了,所以你应该使用它来保持一致性而不是FLT_MAX,即使它们在32位平台上是相同的

答案 4 :(得分:3)

我正在寻找一个Swift版本的最小 CGFloat值并在这里登陆,如果你也是;)那么这就是答案:

CGFloat.leastNormalMagnitude

答案 5 :(得分:1)

这更多的是评论而不是答案,但我目前没有足够的声誉来评论。

我刚刚遇到使用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变量应该是一个double,但它似乎是一个浮点数,当它被赋值为double值时(即CGFLOAT_MAX)溢出。据我所知this Apple documentation page表示在NSLog中使用%f应该打印双倍 - 有人请纠正我,如果这是错误的。

所有这一切,如果FLT_MAX适用于您的情况,您可能希望现在坚持使用它而不是CGFLOAT_MAX,特别是如果您依赖于专门接受浮点参数而不是double或CGFloat的库。

答案 6 :(得分:1)

CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);

宽度= 0.0000000000000000000000000000000000000117549435,身高= 3.40282347E + 38

答案 7 :(得分:0)

在Swift 3.0中,你也可以使用CGFloat(FLT_MAX),特别是如果你想在其他情况下使用它,比如zIndex,其中CGFloat.greatestFiniteMagnitude将超出范围。