Подтвердить что ты не робот

Есть ли константа для максимального значения CGFloat?

Мне нужно создать CGSize для вычисления высоты текста произвольного текста с произвольной длиной. UIKit имеет этот хороший метод -sizeWithFont: constrainedToSize: и мой текст ограничивается только шириной, но не высотой.

Для этого мне нужно установить максимально возможный CGFloat для высоты.

Есть ли константа типа "CGFloatMax"?

4b9b3361

Ответ 1

CGGeometry определяет:

#define CGFLOAT_MAX FLT_MAX

Ответ 2

Для тех, кто использует Swift 2, вы должны использовать:

CGFloat.max

Для тех, кто использует Swift 3, вы должны использовать:

CGFloat.greatestFiniteMagnitude

Обратите внимание, что CGFloat.max был удален, когда появился Swift 3, что отражено в документации .

Ответ 4

A CGFloat - это просто float, поэтому вы можете безопасно использовать FLT_MAX из <float.h>.

EDIT: Как уже указывали другие, похоже, что CGFLOAT_MAX уже определен для вас, поэтому вы должны использовать это для согласованности, а не FLT_MAX, хотя они одинаковы на 32-битных платформах.

Ответ 5

Я искал Swift версию минимум CGFloat и приземлился здесь, если вы тоже;), то вот ответ:

CGFloat.leastNormalMagnitude

Ответ 6

Это скорее комментарий, чем ответ, но у меня нет достаточной репутации для комментариев в настоящее время.

Я просто столкнулся с неожиданным поведением с использованием CGFLOAT_MAX: на iPhone 5S (64-битное) устройство под управлением iOS 7.1.2 и используя 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 взял меня в файл CGBase.h фреймворка CoreGraphics со следующим определением макроса:

# define CGFLOAT_MAX DBL_MAX

Я команду + нажал на CGFloat, и Xcode взял меня в другую строку в том же файле:

typedef CGFLOAT_TYPE CGFloat;

Затем я команду + нажал на CGFLOAT_TYPE, и он перешел в строку #define здесь:

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

Итак, по какой-то причине моя переменная CGFloat должна быть двойной, однако она выглядит как float, которая переполняется, когда ей присваивается двойное значение (т.е. CGFLOAT_MAX). Насколько я могу судить эта страница документации Apple указывает, что использование% f с NSLog должно печатать двойное - кто-то, пожалуйста, исправьте меня, если это не так.

Все, что сказать, если FLT_MAX работает для вашего случая, вы можете придерживаться этого на данный момент вместо CGFLOAT_MAX, особенно если вы полагаетесь на библиотеку, которая специально принимает аргументы float вместо double или CGFloat.

Ответ 7

CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);

width = 0.0000000000000000000000000000000000000117549435, height = 3.40282347E + 38

Ответ 8

В Swift 3.0 вы также можете использовать CGFloat (FLT_MAX), особенно если вы хотите использовать его в других случаях, таких как zIndex, где CGFloat.greatestFiniteMagnitude будет вне диапазона.