Domanda

sto adegua i miei vecchi apps per iPhone 4 utilizzando il simulatore in questo momento e che posso attraverso un comportamento molto strano con UILabel disegno e sizeWithFont: constrainedToSize:. Che ho attualmente solo vedere sul simulatore iPhone 4

Sto cercando di mostrare il seguente testo di errore per l'utente: @"Nome utente o password errati" Questo testo si trova all'interno di una casella dinamica errore che è costruito da tre parti:. Superiore, centrale e inferiore e perciò calcolare la dimensione dell'etichetta così posso cambiare il frame di immagine sfondo centro conseguenza

Ecco un esempio del codice di calcolo dimensioni UILabel:

CGRect errorFrame = CGRectMake(40, 0, 240.0, 22.0);
UILabel *errorlabel = [[UILabel alloc] initWithFrame:errorFrame];
errorlabel.adjustsFontSizeToFitWidth = NO;
errorlabel.font = [UIFont fontWithName:@"HelveticaNeue" size:16];
errorlabel.textAlignment = UITextAlignmentLeft;
errorlabel.numberOfLines = 0;
errorlabel.text = @"Incorrect user name or password";
// since only the width is fixed I will use a really large height value
CGSize errorLabelSize = [errorlabel.text sizeWithFont:errorlabel.font constrainedToSize:CGSizeMake(240.0, 4600.0)];
CGRect newFrame = errorlabel.frame;
newFrame.size.height = errorLabelSize.height;
errorlabel.frame = newFrame;
    // added so I can easily see the new frame
errorlabel.backgroundColor = [UIColor redColor];
[self.errorView addSubview:errorlabel];
[errorlabel release];

Quando eseguo il codice su iPhone 3 simulatore del sizeWithFont: constrainedToSize: metodo restituisce un'altezza di 1 riga e trae questo testo di errore su 1 linea. Quando si esegue lo stesso codice sul iPhone 4 simulatore sizeWithFont: constrainedToSize: restituisce una dimensione (170,0, 42,0) che è necessaria per due linee ma etichetta stessa è disegnato su 1 linea. E 'come se il codice sizeWithFont non usa le stesse logiche del codice di rendering.

Dal momento che modificando il testo di errore è alcuna opzione :) alcuna idea di come bypass questo problema o risolverlo?

Grazie in anticipo

È stato utile?

Soluzione

Ho questo stesso problema, con lo stesso tipo di carattere. Non ho trovato un modo per prevedere quando si verificherà, e sembra mai essere più di una riga in più precisamente. Accade sul dispositivo esattamente come il simulatore. Succede in tutte le iOS 4.0, 4.0.1 e 4.0.2. Non ho ancora controllato sul simulatore 4.1.

Alla fine sono svolte intorno notando manualmente i luoghi cui si è verificato e sottraendo una riga, espressa in queste posizioni. Quando ci aggiorniamo a 4,1 controlleremo per vedere se questo comportamento ha persistito.

Altri suggerimenti

ho notato questo problema. Anche notato che quando si usa iPhone 4, uno spazio vuoto che è incluso in una stringa di testo è calcolato come 4 punti di larghezza, ma se si calcola la larghezza di uno spazio vuoto di per sé, è calcolato come 5pts larghe .... ( utilizzando ArialMT, 14pt)

Dopo aver inviato questo bug ad Apple circa un anno fa ho ricevuto un'email da loro dicendo che il problema dovrebbe essere risolto in iOS5 beta 1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top