Ответ 1
Интересно, почему это все еще остается без ответа. Во всяком случае, здесь самый быстрый метод, который работает для меня.
Создайте категорию NSAttributedString под названием "Высота". Это должно сгенерировать два файла под названием "NSAttributedString + Height. {H, m}"
В файле .h:
@interface NSAttributedString (Height)
-(CGFloat)heightForWidth:(CGFloat)width;
@end
В файле .m:
-(CGFloat)heightForWidth:(CGFloat)width
{
return ceilf(CGRectGetHeight([self boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading
context:nil])) + 1;
}
Вот что происходит:
- boundRectWithSize: options: context get rect, ограниченный шириной, которую вы передаете методу. Опция NSStringDrawingUsesLineFragmentOrigin указывает, что она ожидает многострочную строку.
- Затем мы выбираем параметр height из этого прямоугольника.
- В iOS 7 этот метод возвращает десятичные числа. Нам нужна круглая фигура. ceilf помогает с этим.
- Мы добавляем дополнительную единицу к возвращаемому значению.
Здесь, как его использовать
NSAttributedString *string = ...
CGFloat height = [string heightForWidth:320.0f];
Вы можете использовать эту высоту для вычислений компоновки.