Is there a constant for the maximum CGFloat value?

Objective CIosFoundationCore FoundationCgfloat

Objective C Problem Overview


I need to create a CGSize to compute text height of an arbitrary text with arbitrary length. UIKit has this nice method -sizeWithFont:constrainedToSize: and my text is only constrained in width, but not in height.

For this, I need to set the maximum possible CGFloat for the height.

Is there a constant like "CGFloatMax"?

Objective C Solutions


Solution 1 - Objective C

For those using Swift 2, you should use:

CGFloat.max

For those using Swift 3, you should use:

CGFloat.greatestFiniteMagnitude

Note that CGFloat.max was removed when Swift 3 came out, as reflected in the documentation.

Solution 2 - Objective C

CGGeometry defines:

#define CGFLOAT_MAX FLT_MAX

Solution 3 - Objective C

How about CGFLOAT_MAX?

Solution 4 - Objective C

I was looking for a Swift version of minimum CGFloat value and landed here, if you too ;) then here is the answer:

CGFloat.leastNormalMagnitude

Solution 5 - Objective C

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.

Solution 6 - Objective C

This is more of a comment than an answer however I don't have enough reputation to comment at the present.

I just came across unexpected behavior with using CGFLOAT_MAX: on an iPhone 5S (64bit) device running iOS 7.1.2 and using Xcode 5.1.1, the following code:

CGFloat numRot = floorf(CGFLOAT_MAX / 360.0);
NSLog(@"numRot = %.2f", numRot);

Outputs:

numRot = inf

Whereas, this code:

CGFloat numRot = floorf(FLT_MAX / 360.0);
NSLog(@"numRot = %.2f", numRot);

Correctly outputs:

numRot: 945228740662580166143622731901435904.00

I command+clicked on the CGFLOAT_MAX and Xcode took me to the CoreGraphics frameworks CGBase.h file with the following macro definition:

# define CGFLOAT_MAX DBL_MAX

I command+clicked on CGFloat and Xcode took me to another line in the same file:

typedef CGFLOAT_TYPE CGFloat;

Then I command+clicked on the CGFLOAT_TYPE and it jumped to the #define line here:

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

So, for some reason my CGFloat variable is supposed to be a double, however it appears to be a float that overflows when it gets assigned a double value (i.e. CGFLOAT_MAX). As far as I can tell this Apple documentation page indicates using %f with NSLog should print the double - someone please correct me if this is wrong.

All that to say, if FLT_MAX works for your case, you may want to stick with that for now instead of CGFLOAT_MAX, especially if you are relying on a library that specifically accept float arguments instead of double or CGFloat.

Solution 7 - Objective C

CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);

width = 0.0000000000000000000000000000000000000117549435, height = 3.40282347E+38

Solution 8 - Objective C

In Swift 3.0, You can also use CGFloat(FLT_MAX), especially if you want to use it in other cases like zIndex, where CGFloat.greatestFiniteMagnitude will be out of range.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionProud MemberView Question on Stackoverflow
Solution 1 - Objective CGBF_GabrielView Answer on Stackoverflow
Solution 2 - Objective ChighlycaffeinatedView Answer on Stackoverflow
Solution 3 - Objective CjscsView Answer on Stackoverflow
Solution 4 - Objective CAamirRView Answer on Stackoverflow
Solution 5 - Objective CPaul RView Answer on Stackoverflow
Solution 6 - Objective CLeo ThiessenView Answer on Stackoverflow
Solution 7 - Objective CRajan TwanabashuView Answer on Stackoverflow
Solution 8 - Objective CAnson YaoView Answer on Stackoverflow