2015-06-11 5 views
5

ich eine Unterklasse Textfeld Ansicht in meinem View-Controller erstellt haben, mit der Schriftgröße zu , die AdjustFontSizeToWidth aktiviert und die Mindestschriftgröße auf 10. Mein Textfeld enthält einen Platzhaltertext, der zu groß für die Ansicht ist. Die Schriftgröße an Breite anpassen wird aktiviert und das System verkleinert die Schriftgröße auf . Ich weiß nicht genau warum , weil der Platzhalter immer noch nicht passt (siehe Screenshot) Irgendeine Idee, warum ist das passiert? Habe ich etwas verpasst? I subclassed UITextField und überschreiben die folgenden Methoden (nicht sicher, es ist relevant, aber diese scheinen Methoden zu sein, die diese Fehler verursachen können):UITextField Unterklasse Messing 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: Update, habe ich versucht, this solution zu verwenden und den Code ein wenig angepasst, damit er auch für den Platzhalter funktioniert. Die Schriftgrößenanpassung ist in Ordnung, aber die Benutzeroberfläche ist durcheinander, wenn der Text verkleinert wird, der Text nach links, hinter der linken Bildansicht. Auf dem Screenshot sehen wir, dass der rechte Rand zu groß und der Text zu viel links ist. Screenshot fail new try

+0

Es gibt eine Mindestsystemgröße für das System. UITextField verkleinert die Schriftgröße nicht so weit, wie Sie es sich erhoffen. – matt

+0

Meine minimale Schriftgröße ist 10, und der Platzhalter hat eine Schriftart mit 14pt statt der 15, die ich standardmäßig gab, es ist wahrscheinlich falsch berechnet. Deshalb frage ich. – Loadex

Antwort

1

Sie verpassen nichts - das ist eine Eigenart von iOS. minimumFontSize Werte von weniger als 14 scheinen nach my answer zu einer ähnlichen Frage vollständig ignoriert zu werden.

Stellen Sie Ihre ursprüngliche Schriftgröße auf 300 und die UITextField wird immer noch 14 pt, nicht 10 pt.

14 ist eine ungerade magische Zahl; undokumentiert, aber wahrscheinlich verwendet, um die Lesbarkeit zu erhalten. Wenn es nur niedriger sein könnte.

+0

... und ich denke, 14 ist die minimale Systemschriftgröße matt erwähnt. –

+0

@Cowrin Newall Danke für Ihre Antwort! Ich wusste nichts davon. Ich habe versucht, die Lösung, die Sie in Ihrer anderen Antwort erwähnt, ein wenig angepasst, aber diese Lösung scheint fehlerhaft und Anpassung der Schriftart verursachen schlechte Platzierung durch Apple-Methoden verursacht. Wenn ich die Größe meines Textes ändere, wird der Text hinter meinem linken Bild gezeichnet. Irgendeine Idee warum/wie man es repariert? – Loadex

+0

Ich bin mir nicht sicher, aber in den Apple Docs heißt es nicht 'textRectForBounds:' direkt zu nennen, und der Beispielcode tut es. Sind Ihre Constraints korrekt eingerichtet usw.? Nicht ganz sicher, wie dein neues Problem aussieht. –