SizeWithFont: constrainedToSize: lineBreakMode устарел

У меня есть следующий код:

float height = [string sizeWithFont:[UIFont systemFontOfSize:kFontSize] constrainedToSize:CGSizeMake(widthOfTextView, 999999.0f) lineBreakMode:NSLineBreakByWordWrapping].height + verticalPadding;

Однако всякий раз, когда я запускаю свое приложение и получаю предупреждение о том, что это устарело. Что я должен использовать и как использовать его с моим текущим кодом?

Спасибо!

Ответ 1

sizeWithFont: ConstrainedToSize: lineBreakMode устарел с iOS 7, поэтому я также искал высоко и низко для замены. Это, кажется, лучший ответ, который я нашел до сих пор:

fooobar.com/questions/9702/...

Ответ 2

Это заменяется на [string boundingRectWithSize: options: attributes: context]. "Трюк" заключается в создании словаря атрибутов, который содержит режим шрифта и прерывания строки, который вы ранее использовали. В вашем случае это должно быть:

// Create a paragraph style with the desired line break mode
NSMutableParagraphStyle *paragraphStyle = [[[NSMutableParagraphStyle alloc] init] autorelease];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;

// Create the attributes dictionary with the font and paragraph style
NSDictionary *attributes = @{
                               NSFontAttributeName:detailTextFont,
                               NSParagraphStyleAttributeName:paragraphStyle
                           };

// Call boundingRectWithSize:options:attributes:context for the string 
CGRect textRect = [string boundingRectWithSize:CGSizeMake(widthOfTextView, 999999.0f)
                                       options:NSStringDrawingUsesLineFragmentOrigin
                                    attributes:attributes
                                       context:nil];

float height = textRect.size.height;

Если вы оставите стиль абзаца, вы получите значение по умолчанию для NSLineBreakByWordWrapping.

Ответ 3

На самом деле вам не нужно много бежать от последнего устаревшего кода. Его просто то, что он говорит, есть, возможно, более хорошая замена, но вы должны остерегаться того, что только iOS7 может его использовать. Рынок обычно требует, чтобы мы нацелились, по крайней мере, на одну главную версию в обратном направлении... Кроме того, некоторые API приходят и уходят, вы можете дождаться следующей крупной версии, чтобы убедиться, что время доказывает преимущество обновления вашей кодовой базы.

Ответ 4

Он сообщает вам в docs.

В нем говорится, что метод устарел, а затем говорит вам, что вы должны использовать на своем месте.

Вы должны использовать: boundingRectWithSize: options: attributes: context: