sizeWithFont - странное поведение при использовании символа & - PullRequest
3 голосов
/ 20 августа 2009

Всякий раз, когда в тексте присутствует &, получение высоты, кажется, постоянно отключено. Обе функции возвращают меньше, чем фактическая высота:

CGSize labelSize = [nameLabel.text sizeWithFont:nameLabel.font constrainedToSize: CGSizeMake( actualWidth, MAXFLOAT ) lineBreakMode:UILineBreakModeWordWrap];

CGRect textSize = CGRectMake(0.0, 0.0, 320.0, FLT_MAX);
nameLabel.frame = [nameLabel textRectForBounds:textSize limitedToNumberOfLines:0];

Ни один из них не вернул бы правильную высоту, хотя 2-й метод, использующий textRectForBounds, возвращает намного ближе фактическую высоту. Первый вернул бы 240, но позднее вернул бы 700. Фактический - 750.

Это портит мой UITableView, показывая тексты, которые накладываются друг на друга.

Интересно, что он возвращает ту же высоту, если текст не содержит символа &.

Может кто-нибудь просветить меня, пожалуйста, что касается моей жизни, я не понимаю, что здесь происходит, и знаю, как это исправить правильно.

Большое спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 20 августа 2009

-textRectForBounds:limitedToNumberOfLines: не следует вызывать напрямую (обратите внимание на документы ). Так что не обязательно быть правильным. В нем также указывается, что «метки в объектах UITableViewCell имеют размер в зависимости от размеров ячейки, а не запрошенного размера».

Я подозреваю, что actualWidth в вашем вызове sizeWithFont:constrainedToSize:lineBreakMode: шире, чем вы ожидаете, так что строка фактически не переносится. Как вы рассчитываете actualWidth?

Вы можете заменить это на sizeWithFont:forWidth:lineBreakMode:, что специально для того, что вы пытаетесь сделать. Тем не менее, это может быть просто обертка вокруг звонка, который вы делаете.

1 голос
/ 15 января 2010

У меня просто была такая же проблема. Я закончил тем, что избежал символа & и изменил его на &, и все работало нормально. UILabel был достаточно умен, чтобы отображать экранированные символы и правильно, а размер был правильно рассчитан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...