我需要创建一个CGSize来计算任意长度的任意文本的文本高度。 UIKit有这个很好的方法-sizeWithFont:constrainedToSize:我的文本只受宽度限制,但不是高度。
为此,我需要为高度设置最大可能的CGFloat。
是否有类似“CGFloatMax”的常量?
答案 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将超出范围。