sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode: альтернатива iOS7

Помогите мне, пожалуйста, найти альтернативу устаревшему методу...

CGSize size = [title sizeWithFont:buttonFont
                                  minFontSize:10
                               actualFontSize:nil
                                     forWidth:_view.bounds.size.width
                                lineBreakMode:NSLineBreakByClipping];

Может (boundingRectWithSize:options:attributes:context:) сделать это? Что-то вроде этого...

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIFont systemFontOfSize:10], NSFontAttributeName,
                                nil];

    CGSize size = [title boundingRectWithSize:CGSizeMake(_view.bounds.size.width-kBorder*2, _view.bounds.size.height)
                                      options:NSLineBreakByClipping
                                   attributes:attributes
                                      context:nil].size;

Я прав? Жду ваших советов :)


person Konstantin    schedule 07.10.2013    source источник


Ответы (1)


Взгляните на предыдущий ответ, который я сделал здесь, используя этот код:

- (CGSize)text:(NSString *)text sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
{
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(7.0))
    {
        NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                          font, NSFontAttributeName,
                                          nil];

        CGRect frame = [text boundingRectWithSize:size
                                          options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                       attributes:attributesDictionary
                                          context:nil];

        return frame.size;
    }
    else
    {
        return [text sizeWithFont:font constrainedToSize:size];
    }
}
person Jordan Montel    schedule 07.10.2013
comment
Слабое связывание было бы лучшим решением, чем явная проверка версии: if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) - person akashivskyy; 07.10.2013
comment
@akashivskyy Хорошо, спасибо, я улучшу свой ответ :) Мне любопытно, не могли бы вы объяснить мне, почему это лучше, пожалуйста? Спасибо - person Jordan Montel; 07.10.2013
comment
@JordanMontel Всегда лучше проверить конкретный API, который вам нужен, чем проверять версию iOS. - person rmaddy; 13.11.2015