In un UITableView
che deve visualizzare un lungo elenco di conversazioni chatlike, che spesso contengono emoji, si verifica un errore di calcolo delle dimensioni.Emojis scherza con la dimensione di obj-cWithFont matematica
Il mio problema è che, se una stringa è della lunghezza giusta e io uso sizeWithFont
, nella prima misura utilizzando sizewithfont
ottengo una lunghezza errata della stringa, causando un "interruzione di riga".
Suppongo che sia perché la stringa ":-)" è più ampia dell'effettiva icona di emoticon.
La prova può essere visto qui:
Ora, oltre ad alcuni altri stack, alcuni sostengono che sizeWithFont
rappresenteranno solo per la stringa, non l'Emoji, che per me non fa senso, dal momento che va bene "alla fine" ...
Ma loro propongono invece di usare sizeToFit, quindi ho deciso di provarlo.
Bam, stesso risultato.
Qualcuno sa come contrastarlo? Esiste un boolean
per verificare se "L'etichetta è terminata con l'elaborazione delle emoji", quindi posso saltare quella chiamata?
L'esecuzione della stessa linea due volte non fa nulla, sembra che la vista debba essere disegnata, prima che sizeWithFont
realizzi il suo errore.
La colonna visualizzata viene eseguita in un segmento - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
, su una cella personalizzata. Posso anche replicare l'errore su una UITableViewCell perfettamente regolare, in modo che non sembri esserlo.
Si sta dimensionando un'etichetta o la cella stessa? Se solo l'etichetta sta dimensionando, penso che userò il layout automatico per fare tutta la magia. Calcola in modo programmatico che la dimensione dell'etichetta sia soggetta a errori. – zetachang
Ho trovato che questo restituisce buone misurazioni, ma non ho provato emoji. - [UILabel textRectForBounds: limitedToNumberOfLines:] –
da iOS 7 'sizeWithFont: constrainedToSize: lineBreakMode' è deprecato e sostituito con' boundingRectWithSize: options: attributes: context: ' – aug2uag