Question

J'ai du code qui contient une tonne de sizeWithFont appels dont je dois désespérément me débarrasser puisque sizeWithFont est obsolète.Maintenant, j'ai en quelque sorte compris comment utiliser boundingRectWithSize à la place, cependant, au lieu de refaire un million d'appels, j'ai pensé à créer une fonction wrapper pour effectuer sizeWithFonts.

Voici donc la méthode que j'ai proposée :

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

Ce que je souhaite, c'est que seules les valeurs définies seront appelées tandis que le reste sera quelle que soit leur valeur par défaut.Ainsi, si un appel n’a que la police et la largeur, seules celles-ci seront définies.Je comprends que fontSize n'est plus pris en charge, mais j'apprécierais des suggestions à ce sujet.

Ma question est :quelles sont les valeurs par défaut sur lesquelles je dois définir la police, la largeur, la taille, la ligneBreakMode, minFontSize et actualFontSize afin de ne pas obtenir de résultats étranges.En gros, je veux le même résultat pour :

[s sizeWithFont:font
constrainedToSize:size];

comme avec :

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

Dites-moi si des éclaircissements supplémentaires sont nécessaires.Si vous pouvez suggérer une bonne façon de faireboundingRectWithSize, alors ce serait cool aussi.

Était-ce utile?

La solution

Vous pourriez envelopper des primitives dans des objets ?Vous auriez donc :

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

Toutes les valeurs « par défaut » seraient définies sur zéro.Pour CGFloat, vous les créeriez en utilisant :

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

Pour NSValue, vous pouvez utiliser:

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

La question clé ici est de savoir comment faire la différence entre une valeur valide et un identifiant d'absence.Généralement, vous faites cela en utilisant soit une constante définie (telle que NSNotFound), mais pour les types que vous avez répertoriés, une telle chose n'existe pas.C’est là que les objets peuvent aider, car l’absence d’un objet indique intrinsèquement l’absence de valeur.

Autres conseils

vous pouvez créer une méthode :

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

C'est la manière la plus simple de créer des « valeurs par défaut ».

Mettre à jour Swift 4.2

 let size = CGSize(width: 0, height: 0)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top