I have code which has a ton of sizeWithFont
calls that I need to desperately get rid off since sizeWithFont has been deprecated. Now, I have sort of figured out how to use boundingRectWithSize
in its stead, however, instead of re-doing a million calls, I thought of making a wrapper function to do the sizeWithFonts.
So, here's the method I came up with :
- (CGSize) getSizeForCurrentFont:(UIFont*)font
forWidth:(CGFloat)width
constrainedToSize:(CGSize)size
lineBreakMode:(NSLineBreakMode)lineBreakMode
minFontSize:(CGFloat)minFontSize
actualFontSize:(CGFloat *)actualFontSize
{
// functionality
}
What I am going for is that only the values that are set will be called while the rest will be whatever the default value for them should be. So, if a call only has font and width, only that will be set. I do understand that fontSize is no longer supported, but I'd appreciate suggestions on that.
My question is : what are the default values that I should set font,width,size,lineBreakMode,minFontSize and actualFontSize to so that I don't get weird results. Essentially, I want the same result for :
[s sizeWithFont:font
constrainedToSize:size];
as with :
[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#]
Do tell me if any further clarification is required. If you can suggest a nice way to do boundingRectWithSize, then that would be cool as well.
You could wrap primitives into objects? So you'd have:
- (CGSize) getSizeForCurrentFont:(UIFont*)font
forWidth:(NSNumber*)width
constrainedToSize:(NSValue*)size
lineBreakMode:(NSNumber*)lineBreakMode
minFontSize:(NSNumber*)minFontSize
actualFontSize:(NSNumber*)actualFontSize
{
// functionality
}
Any 'default' values would be set to nil. For CGFloat
, you'd create them using:
CGFloat value = 10.0f;
NSNumber* valueObj = @(value);
For NSValue
, you can use:
CGSize size = CGSizeMake(10.0f, 10.0f);
NSValue* sizeObj = [NSValue valueWithCGSize:size];
The key issue here, is how to differentiate between a valid value and an absence identifier. Typically you do this using either a defined constant (such as NSNotFound
), but for the types you've listed such a thing doesn't exist. This is where objects can help, as the lack of an object inherently indicates the absence of a value.