任意の長さの任意のテキストのテキストの高さを計算するためにCGSizeを作成する必要があります。 UIKitにはこのNiceメソッド-sizeWithFont:constrainedToSize:があり、テキストの幅は高さではなく幅のみに制限されています。
このために、高さの可能な最大のCGFloatを設定する必要があります。
「CGFloatMax」のような定数はありますか?
CGGeometry 定義:
#define CGFLOAT_MAX FLT_MAX
Swift 2を使用している場合、以下を使用する必要があります。
CGFloat.max
Swift 3を使用している場合、以下を使用する必要があります。
CGFloat.greatestFiniteMagnitude
ご了承ください CGFloat.max
は、Swift 3が出たときに削除されました。これは documentation に反映されています。
CGFloat
は単なるfloat
なので、FLT_MAX
から<float.h>
を安全に使用できます。
編集:他の人が指摘しているように、CGFLOAT_MAX
はすでに定義されているようですので、32ビットプラットフォームでも同じですが、FLT_MAX
ではなく一貫性のために使用する必要があります。
私はSwiftバージョンの最小 CGFloat値を探していて、もしあなたがここに着いた;)そして、ここに答えがあります:
CGFloat.leastNormalMagnitude
CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);
幅= 0.0000000000000000000000000000000000000000000117549435、高さ= 3.40282347E + 38
これは答えというよりもコメントです。しかし、現時点ではコメントするのに十分な評判がありません。
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であると想定されていますが、double値(つまりCGFLOAT_MAX)が割り当てられるとオーバーフローするfloatのように見えます。 this Apple documentation page はNSLogで%fを使用するとdoubleが出力されることを示しています。これが間違っている場合は誰かが修正してください。
言うまでもなく、FLT_MAXがあなたのケースで機能する場合、特にdoubleまたはCGFloatではなくfloat引数を受け入れるライブラリに依存している場合は特に、CGFLOAT_MAXの代わりに今のところそれを使い続けることができます。
In Swift 3.0、また、CGFloat.greatestFiniteMagnitudeが範囲外になるzIndexのような他のケースで使用したい場合は、CGFloat(FLT_MAX)を使用することもできます。