我需要创建一个CGSize计算任意长度的任意文本的文字高度。 UIKit有这个不错的方法-sizeWithFont:constrainedToSize:我的文本仅限于宽度,但不是高度。CGFloat的最大值是否有一个常量?
对于这一点,我需要设置高度最大可能CGFloat的。
有没有像 “CGFloatMax” 恒定?
我需要创建一个CGSize计算任意长度的任意文本的文字高度。 UIKit有这个不错的方法-sizeWithFont:constrainedToSize:我的文本仅限于宽度,但不是高度。CGFloat的最大值是否有一个常量?
对于这一点,我需要设置高度最大可能CGFloat的。
有没有像 “CGFloatMax” 恒定?
CGGeometry定义:
#define CGFLOAT_MAX FLT_MAX
评论http://stackoverflow.com/a/26188012/378882应标记为答案。 – JastinBall 2016-02-07 21:21:23
A CGFloat
只是一个float
所以你可以安全地使用FLT_MAX
从<float.h>
。
编辑:正如其他人现在指出,它看起来像CGFLOAT_MAX
已经为您定义,所以你应该使用它的一致性,而不是FLT_MAX
,即使它们是在32位平台上的相同的东西。
虽然类型会根据系统而变化。当然,iOS现在都是32位的,但不应该假设typedef的基础类型。 – 2011-06-08 21:04:44
@Josh:确实 - 谢谢 - 我已经在后续编辑中注意到了这一点 – 2011-06-08 21:06:15
CGFloat并不总是一个浮点型 - 当在OS X上编译64位应用程序时,CGFloat被定义为double。请参阅CGBase.h,关于第100行。 – leecbaker 2011-11-21 22:32:26
如何CGFLOAT_MAX
?
这比回答的评论,但是我没有足够的信誉,在本发表评论。
我只是碰到意外的行为来使用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值溢出的浮动(即CGFLOAT_MAX)。据我可以告诉this Apple documentation page表示使用%F与NSLog应打印双人 - 请纠正我,如果这是错误的。
这就是说,如果FLT_MAX适用于您的情况,那么现在您可能希望坚持使用它,而不是CGFLOAT_MAX,尤其是如果您依赖的是专门接受float参数而不是double或CGFloat的库。
对于使用斯威夫特2这些,你应该使用:
CGFloat.max
对于使用斯威夫特3的,你应该使用:
CGFloat.greatestFiniteMagnitude
注意CGFloat.max
被去除时,斯威夫特3出来,如体现在documentation。
Simple,clean and cool) – 2016-06-07 10:54:59
注意从Swift 3开始,现在是'CGFloat.greatestFiniteMagnitude':“对应于C宏FLT_MAX,DBL_MAX等。这些宏的命名有些误导,因为无穷大大于此值值。” – jemmons 2016-07-10 14:41:07
很好,很清楚! – 2017-01-25 10:26:57
CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);
宽度= 0.0000000000000000000000000000000000000117549435,身高= 3.40282347E + 38
在雨燕3.0,您还可以使用CGFloat的(FLT_MAX),特别是如果你想在其他情况下,像用zIndex,其中CGFloat的使用它。 “最大有限度”将超出范围。
我一直在寻找最低 CGFloat的值的斯威夫特版本,并降落在这里,如果你太;),那么这里就是答案:
CGFloat.leastNormalMagnitude
@answers:upvoted everyone..considering他们是在4彼此之间的秒。 – 2011-06-08 21:03:39
这可能需要更少的时间来检查此类问题的文档,而不是在此处发布。 – 2011-06-08 21:03:52
@Josh Caswell:我认为很多人不知道(至少部分)文档存在。在这种情况下,UIKit会全面使用CGFloat,因此提问者可能只会查看UIKit文档。 @Mikhalo Ivanokov,你需要的是Core Graphics(CG)文档:http://developer.apple.com/library/ios/documentation/CoreGraphics/Reference/CoreGraphics_Framework/也有用的是苹果的在线文档搜索(我已经发现比Xcode更好,或者为此目的,谷歌):http://developer.apple.com/library/ios/search/?q=CGFloat+max – 2011-06-08 22:08:28