Desidero prendere un UILabel standard e aumentare la dimensione del carattere in modo che riempia lo spazio verticale. Prendendo ispirazione dalla risposta accettata per questo question, ho definito una sottoclasse su UILabel con questa implementazione drawRect:Ridimensionamento della dimensione del carattere per adattarsi verticalmente in UILabel
- (void)drawRect:(CGRect)rect
{
// Size required to render string
CGSize size = [self.text sizeWithFont:self.font];
// For current font point size, calculate points per pixel
float pointsPerPixel = size.height/self.font.pointSize;
// Scale up point size for the height of the label
float desiredPointSize = rect.size.height * pointsPerPixel;
// Create and assign new UIFont with desired point Size
UIFont *newFont = [UIFont fontWithName:self.font.fontName size:desiredPointSize];
self.font = newFont;
// Call super
[super drawRect:rect];
}
Ma questo non funziona in quanto le dimensioni del font oltre la parte inferiore dell'etichetta. Se vuoi replicare questo, ho iniziato con un'etichetta 289x122 (w x h), Helvetica come font e un pointSize iniziale di 60 che si adatta comodamente all'etichetta. Ecco ad esempio in uscita da quella standard UILabel e il mio sottoclasse utilizzando la stringa "{Hg":
Ho guardato discendenti dei caratteri e ascendenti, tentarono di scala tenendone conto in combinazioni diverse, ma ancora non hanno avuto fortuna. Qualche idea, è qualcosa che ha a che fare con diversi tipi di carattere che hanno lunghezze variabili di discender e ascender?
beh ... questo è stato un errore imbarazzante semplice. Grazie per averlo individuato. – user524261
Ho provato a implementarlo in 'layoutSubviews', ma non penso che funzioni. Penso che la ragione è che l'assegnazione di un nuovo font alla sottoclasse 'UILabel' innesca un'altra chiamata di' layoutSubviews', che è problematica. Nella mia implementazione, una delle code della mia app è stata bloccata. – user444731