Фрейм вычисления подкласса UILabel

Суть в том, что я пытаюсь воспроизвести пользовательский интерфейс iMessage. Для метки: специальное дополнение этого типа текста заставило меня создать собственный UILabel. Вот код под drawTextInRect:

[super drawTextInRect:UIEdgeInsetsInsetRect(rect, UIEdgeInsetsMake(0, 15.0, 5.0, 15.0))];

Пока никакой тайны.

Проблема возникает, когда моя ячейка (содержащая эту метку, должна вычислять высоту). Метка получает эффект округления метки следующим образом:

cell.message.layer.cornerRadius = 18;
[cell.message sizeToFit];

Видимо, я не могу получить правильную высоту и ширину этой метки. Я использую sizeToFit, а затем измеряю возможные размеры с помощью «sizeWithFont:» (устарело в iOS 7) и «boundingRectWithSize:». Единственный способ правильно отобразить текст — добавить вручную неопределенное количество размеров к высоте и ширине после выполнения расчетов.

Лучшее, что я могу получить, это экран, который может выглядеть хорошо, но все еще имеет некоторые проблемы и не отображает тексты должным образом.

По ссылке есть скрин некоторых скринов не отображается должным образом.


person wolffan    schedule 10.12.2013    source источник


Ответы (1)


Единственный ответ, который я смог увидеть, глядя на код других людей, заключается в том, что они в какой-то момент делают свои собственные расчеты на основе размера букв.

Любой, у кого возникла эта проблема, проверьте: https://github.com/jessesquires/MessagesTableViewController

Это был единственный источник, который я смог найти, в конце концов, в некоторых случаях boundingRectWithSize недостаточно хорош.

person wolffan    schedule 10.01.2014