2015-06-11 14 views
5

ho creato un campo di testo vista sottoclasse dentro il mio controller della vista, con la dimensione del carattere per , l'AdjustFontSizeToWidth abilitato e la dimensione del carattere minima per 10. Il mio campo di testo ha un testo segnaposto troppo grande per adattarsi alla vista. La dimensione del carattere di modifica alla larghezza è attivata e il sistema sta riducendo la dimensione del carattere a . Non so esattamente perché , perché il segnaposto non si adatta ancora (vedi screenshot) Qualche idea sul perché sta succedendo? Mi sono perso qualcosa? I sottoclasse UITextField e sovrascrivere i seguenti metodi (non sono sicuro che è rilevante, ma questo sembra essere metodi che possono causare questo bug):UITextField sottoclasse pasticciano adjustFontSizeToWidth

- (CGRect)leftViewRectForBounds:(CGRect)bounds { 
CGRect leftViewRect = [super leftViewRectForBounds:bounds]; 
if ([self shouldShowLeftView] == YES) { 
    CGFloat newHeight = self.frame.size.height * 0.5f; 
    if (self.leftImage) { 
     leftViewRect.size.width = newHeight; 
    } 
    leftViewRect.origin.x = kMargins; 
    leftViewRect.origin.y = (self.frame.size.height - leftViewRect.size.height)/2.0f; 
} 
return leftViewRect; 
} 


- (CGRect)textRectForBounds:(CGRect)bounds { 
CGRect rectForBounds = [super textRectForBounds:bounds]; 

if ([self shouldShowLeftView] == YES) { 
    rectForBounds.origin.x += kMargins; 
    rectForBounds.size.width -= 2.0 * kMargins; 
} else { 
    rectForBounds.origin.x += kMargins/2.0; 
    rectForBounds.size.width -= 2.0 * (kMargins/2.0); 
} 
return rectForBounds; 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds { 
CGRect rectForBounds = [super editingRectForBounds:bounds]; 

if ([self shouldShowLeftView] == YES) { 
    rectForBounds.origin.x += kMargins; 
    rectForBounds.size.width -= 2.0 * kMargins; 
} else { 
    rectForBounds.origin.x += kMargins/2.0; 
    rectForBounds.size.width -= 2.0 * (kMargins/2.0); 
} 
return rectForBounds; 
} 

placeholder not fitting in the screen

EDIT: aggiornamento, ho cercato di usare this solution e adattato un po 'il codice per farlo funzionare anche per il segnaposto. Il ridimensionamento dei caratteri va bene, ma l'interfaccia utente è incasinata quando il testo è ridotto, il testo si sposta a sinistra, dietro la vista dell'immagine a sinistra. Nello screenshot, possiamo vedere che il margine destro è troppo grande e il testo troppo a sinistra. Screenshot fail new try

+0

C'è una dimensione minima del carattere del sistema. UITextField non ridurrà la dimensione del font fino a dove speri. – matt

+0

La mia dimensione minima del font è 10, e il segnaposto ha un font con 14pt invece del 15 che ho dato di default, probabilmente è calcolato male. Ecco perché lo sto chiedendo. – Loadex

risposta

1

Non ti manca nulla - questo è un capriccio di iOS. I valori minimumFontSize inferiori a 14 sembrano essere completamente ignorati come da my answer a una domanda simile.

Impostare la dimensione del font originale su 300 e lo UITextField sarà ancora 14 pt, non 10 pt.

14 è un numero magico dispari; non documentato, ma probabilmente usato per mantenere la leggibilità. Se solo potesse essere più basso.

+0

... e immagino che 14 sia la dimensione minima del carattere del sistema indicata. –

+0

@Cowrin Newall Grazie per la risposta! Non lo sapevo. Ho provato la soluzione che hai menzionato sull'altra tua risposta, l'ho adattata un po ', ma questa soluzione sembra difettosa e la modifica del font causa una cattiva posizione causata dai metodi Apple. Quando ridimensiono il mio testo, il testo viene disegnato dietro la mia immagine sinistra. Qualche idea sul perché/come risolverlo? – Loadex

+0

Non sono sicuro, ma in Apple Docs si dice di non chiamare 'textRectForBounds:' direttamente e il codice di esempio. I vostri vincoli sono impostati correttamente ecc ecc? Non sei sicuro di quale sia il tuo nuovo problema. –