Pregunta

Tengo un código que tiene un montón de llamadas de toneladas de sizeWithFont que necesito deshacerse desesperadamente, ya que el tamaño, se ha desaprobado. Ahora, tengo una especie de averiguado cómo usar boundingRectWithSize en su lugar, sin embargo, en lugar de volver a hacer un millón de llamadas, pensé en hacer una función de envoltura para hacer el tamaño,

Por lo tanto, aquí está el método que acumulé:

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

Por lo que voy a hacer es que solo los valores que se establecen se llamarán mientras el resto sea el valor predeterminado para ellos. Por lo tanto, si una llamada solo tiene fuentes y anchos, solo que se configurarán. Entiendo que la fuentes ya no es compatible, pero apreciaría las sugerencias sobre eso.

Mi pregunta es: ¿Cuáles son los valores predeterminados que debo establecer fuente, ancho, tamaño, línea de línea, minfontsize y realfontsize para que no obtenga resultados extraños? Esencialmente, quiero el mismo resultado para:

[s sizeWithFont:font
constrainedToSize:size];

como 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#]

Dígame si se requiere una mayor aclaración. Si puede sugerir una forma agradable de hacer un límite de fijación, entonces eso también sería genial.

¿Fue útil?

Solución

¿Podrías envolver los primitivos en objetos?Así que tendrías:

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

Los valores 'predeterminados' se establecerían en NIL.Para CGFloat, los crearía usando:

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

Para NSValue, puede usar:

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

El problema clave aquí, es cómo diferenciar entre un valor válido y un identificador de ausencia.Normalmente, usted hace esto utilizando una constante definida (como NSNotFound), pero para los tipos que ha enumerado tal cosa no existe.Aquí es donde los objetos pueden ayudar, ya que la falta de un objeto indica inherentemente la ausencia de un valor.

Otros consejos

Puede crear un método:

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

Esta es la forma más sencilla de crear "valores predeterminados".

Actualizar SWIFT 4.2

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top