Domanda

Ho il codice che ha una tonnellata di sizeWithFont chiama che ho bisogno di liberarmi disperatamente da quando SizewithFont è stata deprecata. Ora, ho capito come usare boundingRectWithSize nel suo posto, tuttavia, invece di ri-fare un milione di chiamate, ho pensato di fare una funzione wrapper per fare i sizewithfonts.

Quindi, ecco il metodo con cui ho trovato:

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

Quello che sto andando è che solo i valori che sono impostati saranno chiamati mentre il resto sarà qualunque sia il valore predefinito per loro. Quindi, se una chiamata ha solo font e larghezza, solo questo sarà impostato. Capisco che il fontsize non è più supportato, ma apprezzerei i suggerimenti su questo.

La mia domanda è: quali sono i valori predefiniti che dovrei impostare il carattere, la larghezza, la dimensione, la formazione di lineetnia, minfontsize e attualità in modo da non ottenere risultati strani. Essenzialmente, voglio lo stesso risultato per:

[s sizeWithFont:font
constrainedToSize:size];
.

Come con:

[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#]
.

Dimmi se è necessario ulteriori chiarimenti. Se riesci a suggerire un bel modo di fare il limite del limite, allora sarebbe anche bello.

È stato utile?

Soluzione

Potresti avvolgere primitivi in oggetti?Quindi hai:

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

Qualsiasi valore "predefinito" sarebbe impostato su NIL.Per CGFloat, li creeresti usando:

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

Per NSValue, è possibile utilizzare:

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

Il problema chiave qui, è come differenziare tra un valore valido e un identificatore di assenza.In genere lo fai utilizzando una costante definita (come NSNotFound), ma per i tipi che hai elencato una cosa del genere non esiste.Qui è qui che gli oggetti possono aiutare, poiché la mancanza di un oggetto indica intrinsecamente l'assenza di un valore.

Altri suggerimenti

È possibile creare un metodo:

- (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#]
}
.

Questo è il modo più semplice per creare "valori predefiniti".

Aggiorna Swift 4.2

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top