任意の長さの任意のテキストのテキストの高さを計算するために、CGSizeを作成する必要があります。UIKitにはこの素晴らしいメソッド-sizeWithFont:constrainedToSize:があり、私のテキストは幅だけが制限されており、高さは制限されていません。
このために、高さの可能な最大CGFloatを設定する必要があります。
「CGFloatMax」のような定数はありますか?
任意の長さの任意のテキストのテキストの高さを計算するために、CGSizeを作成する必要があります。UIKitにはこの素晴らしいメソッド-sizeWithFont:constrainedToSize:があり、私のテキストは幅だけが制限されており、高さは制限されていません。
このために、高さの可能な最大CGFloatを設定する必要があります。
「CGFloatMax」のような定数はありますか?
Swift 2を使用している場合は、次を使用する必要があります。
CGFloat.max
Swift 3を使用している場合は、次を使用する必要があります。
CGFloat.greatestFiniteMagnitude
ドキュメントCGFloat.max
に反映されているように、Swift3がリリースされたときに削除されたことに注意してください。
CGGeometryは以下を定義します:
#define CGFLOAT_MAX FLT_MAX
どうCGFLOAT_MAX
ですか?
私は最小CGFloat値のSwiftバージョンを探していて、ここに着陸しました;)それならここに答えがあります:
CGFloat.leastNormalMagnitude
ACGFloat
は、からfloat
安全に使用できるようにするためのものです。FLT_MAX
<float.h>
編集:他の人が指摘しているように、すでに定義されているように見えるので、32ビットプラットフォームでは同じものですが、CGFLOAT_MAX
一貫性を保つために使用する必要があります。FLT_MAX
これは答えというよりはコメントですが、現時点ではコメントするのに十分な評判がありません。
CGFLOAT_MAXを使用すると、予期しない動作が発生しました。iOS7.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ファイルが表示されます。
# define CGFLOAT_MAX DBL_MAX
コマンドを押しながらCGFloatをクリックすると、Xcodeによって同じファイルの別の行に移動しました。
typedef CGFLOAT_TYPE CGFloat;
次に、コマンドを押しながらCGFLOAT_TYPEをクリックすると、次の#define行にジャンプしました。
#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
...
したがって、何らかの理由で、私のCGFloat変数はdoubleであると想定されていますが、double値(つまり、CGFLOAT_MAX)が割り当てられるとオーバーフローするfloatのように見えます。私が知る限り、このAppleのドキュメントページでは、NSLogで%fを使用するとdoubleが出力されるはずです。これが間違っている場合は、誰かが私を訂正してください。
言うまでもなく、FLT_MAXがあなたのケースで機能する場合、特にdoubleやCGFloatの代わりにfloat引数を特に受け入れるライブラリに依存している場合は、CGFLOAT_MAXの代わりに今のところそれを使い続けることをお勧めします。
CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);
幅=0.0000000000000000000000000000000000000117549435、高さ= 3.40282347E + 38
Swift 3.0では、CGFloat(FLT_MAX)を使用することもできます。特に、CGFloat.greatestFiniteMagnitudeが範囲外になるzIndexなどの他の場合に使用する場合はそうです。