Pergunta

Eu tenho um código que tem uma tonelada de sizeWithFont chamadas das quais preciso me livrar desesperadamente, já que sizeWithFont foi descontinuado.Agora, eu meio que descobri como usar boundingRectWithSize em vez disso, porém, em vez de refazer um milhão de chamadas, pensei em criar uma função wrapper para executar sizeWithFonts.

Então, aqui está o método que eu criei:

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

O que pretendo é que apenas os valores definidos serão chamados, enquanto o restante será qualquer que seja o valor padrão para eles.Portanto, se uma chamada tiver apenas fonte e largura, somente isso será definido.Entendo que fontSize não é mais compatível, mas agradeceria sugestões sobre isso.

Minha pergunta é :quais são os valores padrão que devo definir font,width,size,lineBreakMode,minFontSize e actualFontSize para não obter resultados estranhos.Essencialmente, quero o mesmo resultado para:

[s sizeWithFont:font
constrainedToSize:size];

como com :

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

Diga-me se for necessário algum esclarecimento adicional.Se você puder sugerir uma boa maneira de fazerboundingRectWithSize, isso também seria legal.

Foi útil?

Solução

Você poderia agrupar primitivos em objetos?Então você teria:

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

Quaisquer valores 'padrão' seriam definidos como nulos.Para CGFloat, você os criaria usando:

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

Para NSValue, você pode usar:

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

A questão principal aqui é como diferenciar entre um valor válido e um identificador de ausência.Normalmente você faz isso usando uma constante definida (como NSNotFound), mas para os tipos que você listou isso não existe.É aqui que os objetos podem ajudar, pois a falta de um objeto indica inerentemente a ausência de um valor.

Outras dicas

você pode criar um 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 é a maneira mais simples de criar "valores padrão".

Atualizar Swift 4.2

 let size = CGSize(width: 0, height: 0)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top