替换sizeWithFont的已弃用的IOS 7函数。如何让它更优雅?

时间:2013-11-04 10:08:53

标签: objective-c ios7

-(CGSize) sizeWithFont2:(UIFont *)font
{
    if ([self respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])
    {
        CGSize result = [self sizeWithAttributes:@{NSFontAttributeName:font}];
        return result;
    }
    return [self sizeWithFont:font];
}
- (CGSize) sizeWithFont2:(UIFont *)font constrainedToSize:(CGSize)size
{
    if ([self respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])
    {
        CGRect frame = [self boundingRectWithSize:size
                                          options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                       attributes:@{NSFontAttributeName:font}
                                          context:nil];
        return frame.size;
    }
    else
    {
        return [self sizeWithFont:font constrainedToSize:size];
    }
}

- (CGSize) sizeWithFont2:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode) lineBreakMode
{
    return [self sizeWithFont2:font constrainedToSize:size]; //the NSLineBreakMode not used?

}

请注意,代码有3个问题:

  1. 对于- (CGSize) sizeWithFont2:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode) lineBreakMode,根本不使用参数lineBreakMode。我不知道如何在IOS 7中使用它。我在stackOverflow中查看并且那里的答案也没有使用该参数。
  2. 另外我认为sizeWithFont:在IOS 6中必须调用sizeWithFont:constraintedToSize:但是使用默认大小。但是大小会是多少?
  3. 最后我在[self sizeWithFont:font];收到警告,因为它是一个已弃用的功能。我想删除那个警告。
  4. 建议?

1 个答案:

答案 0 :(得分:2)

第3点:

如果您使用SDK7,您将始终收到此警告或错误。

第2点:

您可以选择像

这样的尺寸
CGSize maximumSize = CGSizeMake(300, FLT_MAX);

您可以选择300作为宽度,因为它是屏幕尺寸,边距有一点空间。 但是,您应该使用自己的字体和大小值。