Is there a constant for the maximum CGFloat value?

前端 未结 8 763
滥情空心
滥情空心 2021-02-02 05:09

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 cons

相关标签:
8条回答
  • 2021-02-02 05:50

    How about CGFLOAT_MAX?

    0 讨论(0)
  • 2021-02-02 05:50

    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.

    0 讨论(0)
  • 2021-02-02 05:51
    CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);
    

    width = 0.0000000000000000000000000000000000000117549435, height = 3.40282347E+38

    0 讨论(0)
  • 2021-02-02 05:58

    CGGeometry defines:

    #define CGFLOAT_MAX FLT_MAX
    
    0 讨论(0)
  • 2021-02-02 05:59

    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.

    0 讨论(0)
  • 2021-02-02 06:13

    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.

    0 讨论(0)
提交回复
热议问题