質問

SizeWithFontが推奨されているので、私が必死に取り除く必要があるsizeWithFont呼び出しのコードを持っています。さて、私はその代わりにboundingRectWithSizeを使用する方法を考え出しましたが、100万の通話を再生するのではなく、SizewithFontsを実行するためのラッパー関数を作ることを考えました。

だから、私が思い付く方法は次のとおりです。

- (CGSize) getSizeForCurrentFont:(UIFont*)font
                    forWidth:(CGFloat)width
           constrainedToSize:(CGSize)size
               lineBreakMode:(NSLineBreakMode)lineBreakMode
                 minFontSize:(CGFloat)minFontSize
              actualFontSize:(CGFloat *)actualFontSize
{
    // functionality
}
.

私が何が起こるのは、設定されている値のみが呼び出されますが、残りの値はそれらのデフォルト値があるべきであれます。したがって、呼び出しにフォントと幅のみがある場合は、設定されます。 FontSizeがサポートされなくなったことを理解していますが、その上の提案を感謝します。

私の質問は、フォント、幅、サイズ、LineBreakMode、MinFontSize、ActualFontSizeを設定する必要があるデフォルト値とは何ですか。基本的に、私は同じ結果が欲しいのです:

[s sizeWithFont:font
constrainedToSize:size];
.

と同様に:

[s getSizeForCurrentFont:font 
forWidth:width #This is some Default Value# 
constrainedToSize:size 
lineBreakMode:lineBreakMode #This is some Default Value# 
minFontSize:minFontSize #This is some Default Value# 
actualFontSize: actualFontSize #This is some Default Value#]
.

それ以上の説明が必要な場合は教えてください。あなたがBoundingRectWithSizeをするのが素晴らしい方法を提案することができるならば、それはそれだけでもクールです。

役に立ちましたか?

解決

プリミティブをオブジェクトに折り返すことができますか?だからあなたは:

を持っているでしょう
- (CGSize) getSizeForCurrentFont:(UIFont*)font
                    forWidth:(NSNumber*)width
           constrainedToSize:(NSValue*)size
               lineBreakMode:(NSNumber*)lineBreakMode
                 minFontSize:(NSNumber*)minFontSize
              actualFontSize:(NSNumber*)actualFontSize
{
    // functionality
}
.

任意の 'デフォルト'値はnilに設定されます。CGFloatの場合は、次のものを使用して作成します。

CGFloat value = 10.0f;
NSNumber* valueObj = @(value);
.

NSValueでは、次のものを使用できます。

CGSize size = CGSizeMake(10.0f, 10.0f);
NSValue* sizeObj = [NSValue valueWithCGSize:size];
.

主な問題は、有効な値と不在識別子を区別する方法です。通常、定義された定数(NSNotFoundなど)を使用してこれを行いますが、そのようなことをリストしたタイプの場合は存在しません。オブジェクトの欠如が本質的に値が欠如を示すので、オブジェクトが役立つことができる場所です。

他のヒント

メソッドを作成できます。

- (CGSize) sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size {
    [self getSizeForCurrentFont:font 
        forWidth:#some Default Value# 
        constrainedToSize:size 
        lineBreakMode:#some Default Value# 
        minFontSize:#some Default Value# 
        actualFontSize:#some Default Value#]
}
.

これは、「デフォルト値」を作成する最も簡単な方法です。

アップデートSWIFT 4.2

 let size = CGSize(width: 0, height: 0)
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top