有最大CGFloat值的常量吗?

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

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

有像“CGFloatMax”一样的常量吗?

CGGeometry定义:

#define CGFLOAT_MAX FLT_MAX 

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

 CGFloat.max 

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

 CGFloat.greatestFiniteMagnitude 

请注意,当Swift 3出现时, CGFloat.max被删除,如文档中所示 。

CGFLOAT_MAX怎么CGFLOAT_MAX

一个CGFloat只是一个float所以你可以安全的使用<float.h> FLT_MAX

编辑:正如其他人现在指出,它看起来像CGFLOAT_MAX已经为您定义,所以你应该使用它的一致性,而不是FLT_MAX ,即使他们是在32位平台上的相同的事情。

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

 CGFloat.leastNormalMagnitude 

这不是一个答案,而是我目前没有足够的评价。

我刚刚遇到了使用CGFLOAT_MAX的意外行为:在运行iOS 7.1.2的iPhone 5S(64位)设备上使用Xcode 5.1.1,以下代码:

 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文件与下面的macros定义:

 # define CGFLOAT_MAX DBL_MAX 

我命令+点击CGFloat和Xcode带我到同一个文件中的另一行:

 typedef CGFLOAT_TYPE CGFloat; 

然后我命令+点击CGFLOAT_TYPE,并跳转到这里的#define行:

 #if defined(__LP64__) && __LP64__ # define CGFLOAT_TYPE double ... 

所以,由于某种原因,我的CGFloatvariables应该是一个双精度型,但是当它被赋值为一个双精度值(例如CGFLOAT_MAX)时,它似乎是一个溢出。 据我可以告诉这个苹果文档页面指出使用%F与NSLog应该打印双人 – 请纠正我,如果这是错误的。

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

 CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX); 

width = 0.0000000000000000000000000000000000000117549435,height = 3.40282347E + 38

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