Ответ 1
sizeWithFont: ConstrainedToSize: lineBreakMode устарел с iOS 7, поэтому я также искал высоко и низко для замены. Это, кажется, лучший ответ, который я нашел до сих пор:
У меня есть следующий код:
float height = [string sizeWithFont:[UIFont systemFontOfSize:kFontSize] constrainedToSize:CGSizeMake(widthOfTextView, 999999.0f) lineBreakMode:NSLineBreakByWordWrapping].height + verticalPadding;
Однако всякий раз, когда я запускаю свое приложение и получаю предупреждение о том, что это устарело. Что я должен использовать и как использовать его с моим текущим кодом?
Спасибо!
sizeWithFont: ConstrainedToSize: lineBreakMode устарел с iOS 7, поэтому я также искал высоко и низко для замены. Это, кажется, лучший ответ, который я нашел до сих пор:
Это заменяется на [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.
На самом деле вам не нужно много бежать от последнего устаревшего кода. Его просто то, что он говорит, есть, возможно, более хорошая замена, но вы должны остерегаться того, что только iOS7 может его использовать. Рынок обычно требует, чтобы мы нацелились, по крайней мере, на одну главную версию в обратном направлении... Кроме того, некоторые API приходят и уходят, вы можете дождаться следующей крупной версии, чтобы убедиться, что время доказывает преимущество обновления вашей кодовой базы.
Он сообщает вам в docs.
В нем говорится, что метод устарел, а затем говорит вам, что вы должны использовать на своем месте.
Вы должны использовать: boundingRectWithSize: options: attributes: context: