2014-02-04 2 views
2

Я использую шрифты Georgia и Georgia-Bold в своем приложении. Поскольку он должен отображать много текстовых данных, загружаемых с сервера, я использую метод NSString sizeWithFont: constrainedToSize: lineBreakMode: широко в различных местах приложения. Проблема в том, что возвращаемые значения не совсем правильные, а буквы, такие как y, j и g, разрезаются снизу. Как вы можете видеть в этом образеNSString sizeWithFont возвращает неправильные значения шрифтом Georgia

enter image description here

все «J» 's в последней строке не помещаются на этикетке. Это известная ошибка sizeWithFont: constrainedToSize: lineBreakMode :? Что еще более важно, есть ли способ обойти это другое, чем всегда добавлять, то есть 2 пикселя к высоте метки?

Это линия, где я установил размер этикетки:

answerLabel.frame = CGRectMake(15, bottomOfRect(questionLabel.frame) + 10, frame.size.width - 45, [answer sizeWithFont:answerLabel.font constrainedToSize:CGSizeMake(frame.size.width - 45, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping].height); 

Я дважды проверил, чтобы убедиться, что метка не внешние границы его надтаблицы.

Я нацеливание IOS 6 и 7.

+0

Вы используете устаревший метод, если вы нацеливаетесь на iOS 7. Возможно, попробуйте новый? – Desdenova

+0

Наиболее вероятная причина в том, что вы неправильно корректируете базовую линию, но она также может быть ошибкой в ​​шрифте (да, шрифты могут иметь ошибки, или иногда они могут просто выходить за пределы своих ящиков и утверждать, что это функция) , Во-первых, вы можете объяснить, как вы выполняете шаг чертежа (я подозреваю, что ошибка там, особенно если вы делаете что-то вроде калибровки UILabel на основе этого значения). Но также проверьте, не возникает ли ошибка с другими семействами шрифтов. И, как намекают другие, дайте нам знать, нужен ли вам предварительный iOS7. –

+0

Я обновил ответ с дополнительной информацией. И я не получил эту ошибку для других семейств шрифтов, которые я проверил. – johnyu

ответ

2

Попробуйте это:

answerLabel.frame = CGRectMake(15, bottomOfRect(questionLabel.frame) + 10, frame.size.width - 45, ceilf([answer sizeWithFont:answerLabel.font constrainedToSize:CGSizeMake(frame.size.width - 45, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping].height)); 

Вопрос заключается в том, что sizeWithFont:constrainedToSize:lineBreakMode: и новые boundingRectWithSize:options:attributes:context возвращают нецелые размеры, и вы должны окружить их к интегралу размер или незначительное отсечение произойдет, поэтому используйте ceilf()

+0

Большое вам спасибо! Теперь он отлично работает! : D – johnyu

Смежные вопросы