Penso di aver trovato un caso limite per sizeWithFont: constrainedToSize: dove, su una retina display, a volte (sembra basato su word wrapping) restituisce una linea in altezza 1 più alto di quanto sia effettivamente necessario, e ancora più importante di quanto non sia effettivamente disegnato.NSString sizeWithFont: constrainedToSize: restituisce un'altezza errata sui display retina
NOTA: il codice reale che sto usando è sepolto all'interno di un codice di cella di tabella di altezza variabile disegnato con alte prestazioni, quindi ho distillato il problema con un codice di esempio il più semplice possibile. (Si prega di prendere nota di questo quando si cerca di rispondere a qualcosa di diverso dalla mia domanda :-)
Questo esempio UIView riempie il suo contenuto, misura il testo per adattarlo (avvolto), riempie quel rettangolo, quindi disegna il testo.
Su un dispositivo di retina (o simulatore) l'altezza viene restituita 1 riga troppo alta, ma su un dispositivo di pre-retina (o simulatore) restituisce l'altezza corretta.
Apprezzerei molto qualsiasi suggerimento che chiunque possa avere, in quanto è un bug che mi piacerebbe risolvere!
Grazie mille!
-Eric
- (void)drawRect:(CGRect)rect {
NSString * theString = @"Lorem ipsum dolor sit ameyyet, consectetur adipiscing elit. Etiam vel justo leo. Curabitur porta, elit vel.";
UIFont * theFont = [UIFont systemFontOfSize:12];
CGSize theConstraint = CGSizeMake(rect.size.width - 20, rect.size.height - 20);
CGSize theResultSize = [theString sizeWithFont:theFont constrainedToSize:theConstraint];
// dump the measurements
NSLog(@"returned a size h = %f, w = %f", theResultSize.height, theResultSize.width);
// fill the whole rect
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIColor yellowColor] set];
CGContextFillRect(context, rect);
// fill the measured rect
CGRect theRect = CGRectMake(10, 10, theResultSize.width, theResultSize.height);
context = UIGraphicsGetCurrentContext();
[[UIColor cyanColor] set];
CGContextFillRect(context, theRect);
// draw the text
[[UIColor blackColor] set];
[theString drawInRect:theRect withFont:theFont];
}
L'intero progetto semplice è disponibile here.
Immagini Simulator:
http://files.droplr.com/files/9979822/aLDJ.Screen%20shot%202011-01-11%20at%2012%3A34%3A34.png http://files.droplr.com/files/9979822/YpCM.Screen%20shot%202011-01-11%20at%2012%3A36%3A47.png
dura, giusto? Qualcuno può aiutare? Il badge Tumbleweed non è stato molto divertente da guadagnare! – eric
Dopo aver eseguito il tuo progetto di esempio, credo che fosse un simulatore o un bug dell'SDK, sì, non ha alcun problema su Xcode 4 con iOS 4.3. – cxa
Grazie xan. Ora funziona come dovrebbe nell'attuale Xcode/iOS – eric