62

任意の長さの任意のテキストのテキストの高さを計算するために、CGSizeを作成する必要があります。UIKitにはこの素晴らしいメソッド-sizeWithFont:constrainedToSize:があり、私のテキストは幅だけが制限されており、高さは制限されていません。

このために、高さの可能な最大CGFloatを設定する必要があります。

「CGFloatMax」のような定数はありますか?

4

8 に答える 8

188

Swift 2を使用している場合は、次を使用する必要があります。

CGFloat.max

Swift 3を使用している場合は、次を使用する必要があります。

CGFloat.greatestFiniteMagnitude

ドキュメントCGFloat.maxに反映されているように、Swift3がリリースされたときに削除されたことに注意してください。

于 2014-10-03T23:18:06.097 に答える
46

CGGeometryは以下を定義します:

#define CGFLOAT_MAX FLT_MAX
于 2011-06-08T21:02:22.227 に答える
15

どうCGFLOAT_MAXですか?

于 2011-06-08T21:02:25.027 に答える
10

私は最小CGFloat値のSwiftバージョンを探していて、ここに着陸しました;)それならここに答えがあります:

CGFloat.leastNormalMagnitude
于 2017-08-08T12:49:40.170 に答える
5

ACGFloatは、からfloat安全に使用できるようにするためのものです。FLT_MAX<float.h>

編集:他の人が指摘しているように、すでに定義されているように見えるので、32ビットプラットフォームでは同じものですが、CGFLOAT_MAX一貫性を保つために使用する必要があります。FLT_MAX

于 2011-06-08T21:02:21.193 に答える
1

これは答えというよりはコメントですが、現時点ではコメントするのに十分な評判がありません。

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の代わりに今のところそれを使い続けることをお勧めします。

于 2014-07-09T16:12:09.523 に答える
1
CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);

幅=0.0000000000000000000000000000000000000117549435、高さ= 3.40282347E + 38

于 2015-11-04T05:41:55.553 に答える
0

Swift 3.0では、CGFloat(FLT_MAX)を使用することもできます。特に、CGFloat.greatestFiniteMagnitudeが範囲外になるzIndexなどの他の場合に使用する場合はそうです。

于 2017-03-24T00:15:01.363 に答える