2015-03-01 2 views
0

Код ниже является примером того, как я использую CGRect для рисования некоторого текста при создании PDF-документа. Мне нужно, чтобы вычислить точный размер CGRect втягивается с comment1 так, что те, для comment2, comment3 и т.д. все начинают в нужном месте на странице.Точный размер CGRect с использованием CGSize ... sizeWithAttributes

Переменная currentLine отслеживает, где находится конец CGRect. Он отлично подходит для коротких комментариев, но не длинных комментариев, где последующие комментарии перекрываются. Размер шрифта и шрифта правильный.

textRect = CGRectMake(60, currentLine, 650, 300); 
myString = self.comments1.text; 
[myString drawInRect:textRect withAttributes:_textAttributesNotBold ]; 

CGSize contentSize = [myString sizeWithAttributes: @{NSFontAttributeName: [UIFont fontWithName:@"Arial" size:12]}]; 
currentLine = currentLine + contentSize.height; 

Интересно, если проблема с CGRectMake использованием 650 ширины. Это, по-видимому, не учитывается в CGSize .... sizeWithAttributes. Какая ширина делает CGSize .... sizeWithAttributes предположить при расчете contentSize.height?

Или есть лучший способ сделать это?

+0

Я думаю, что вы делаете это назад ... почему вы не рассчитать размер содержимого первого ... затем создайте прямоугольник с этим размером ... затем нарисуйте строку в * that * rect? И затем ... почему вы не передаете те же аргументы для 'withAttributes:' методу вычисления размера, как вы относитесь к методу фактического рисования? – nhgrif

+0

Это имеет смысл, но проблема остается прежней. contentSize.height рассчитывается из sizeWithAttributes: но не учитывает ширину CGRectMake. Я не понимаю, как он вычисляет высоту, не зная ширины рамки. – RGriffiths

+1

Возможный дубликат [iOS 7 sizeWithAttributes: замена для sizeWithFont: constrainedToSize] (http://stackoverflow.com/questions/19145078/ios-7-sizewithattributes-replacement-for-sizewithfontconstrainedtosize) – nhgrif

ответ

1

Я не уверен, если это хороший способ сделать это, но это, кажется, работает:

NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"Arial" size:12]}; 
CGRect rect = [comment1.text boundingRectWithSize:CGSizeMake(650, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil]; 

CGRect textRect = CGRectMake(60, currentLine, 650, rect.size.height); 
[comment1.text drawInRect:textRect withAttributes:attributes ]; 
currentLine = currentLine + rect.size.height; 
+0

Вы должны использовать переменную 'attributes' в обоих местах, которые запрашивают текстовые атрибуты. И последняя строка может быть просто: 'currentLine + = rect.size.height;' – nhgrif

+0

Отредактировано - спасибо – RGriffiths