2017-01-03 5 views
0

Gibt es eine Möglichkeit, die UILabel-Schriftart im großen Gerät größer und im kleinen Gerät kleiner festzulegen?Anpassen der UILabel-Schriftgröße für die Geräteabmessung

Muss ich es programmatisch machen, jedes Mal, wenn die Gerätegröße überprüft?

ist mein Ansatz, um dies jetzt:

class func hightlightPtSize(height: CGFloat) -> CGFloat { 
    return height/25 
} 

class func notSoHighlightPtSize(height: CGFloat) -> CGFloat { 
    return height/30 
} 

class func stdPtSize(height: CGFloat) -> CGFloat { 
    return height/35 
} 

class func sizeForType(height: CGFloat, type: Int) -> CGFloat { 
    switch type { 
    case STD: 
     return stdPtSize(height: height) 
    case HIGHLIGHT: 
     return hightlightPtSize(height: height) 
    case NOT_SO_HIGH: 
     return notSoHighlightPtSize(height: height) 
    default: 
     return 0 
    } 
} 
+0

Ich denke, man kann einfach 'verwenden adjustsFontSizeToFitWidth' anstelle dieses – Tj3n

+0

können Sie bestimmen, durch die Definition, auf welcher Auflösung werden Sie die Benutzeroberfläche entwerfen, sagen, wenn Ihr Storyboard hat Dimension für iPhone 6, also fix die Breite auf 375 und berechnen ändern, wenn Sie das Gerät sagen, sagen für iPhone 5, die Breite 320 hat, erhalten Sie den Unterschied zu '.85 durch 320/375 zu tun, und wenn Ihre Schriftgröße war 14 für iPhone 6, erhalten Sie 11.9 für iPhone 5 und größer für größere Geräte durch Multiplizieren der Differenz zu tatsächlichen Schriftgröße dh 14 * .85, so Formel kommt zu 'fontSize * (actualScreenWidth/designTimeScreenWidth)' – iphonic

+0

I kann nicht herausfinden, was genau Sie vor Augen haben, aber ich nehme an, dass es viele Ansätze gibt, die besser in Betracht gezogen werden können, als es manuell zu tun ... Überprüfen Sie die Idee von [Intrinsic Content Size] (https://developer.apple.com/library/ content/documentation/UserExperience/Conceptual/AutolayoutPG/ViewswithIntrinsicContentSize.html) könnte für Ihren Fall nützlich sein. –

Antwort

4

Ich habe eine Lösung für Ihr Problem. Im Folgenden meinen Code in Objective C.

float newFontSize = [UIScreen mainScreen].bounds.size.height * (fontSize/568.0); 
     if ([UIScreen mainScreen].bounds.size.height < 500) { 
      newFontSize = [UIScreen mainScreen].bounds.size.height * (fontSize/480.0); 
     } 
     self.label.font = [UIFont fontWithName:self.label.font.fontName size:newFontSize]; 

ich hoffe das Ihnen hilft.

+0

Was bedeuten 480.0 und 568.0? – Andre99

+0

Erhöhen Sie die Schriftgröße entsprechend dem Verhältnis der Geräteskalierung, indem Sie die UIScreen-Höhe mit der aktuellen Höhe von xib zur Entwurfszeit vergleichen. Ich habe 568 für größere Gerät eingestellt dann 5s und 480 für kleinere Gerät :) –

+0

arbeitete wie ein Charme, vielen Dank – Andre99

1

ich, indem sie meine Standard-Schriftart für alle Etiketten größer als jede Möglichkeit genutzt, bevor versucht - 60 in meinem Fall. Dann setze die adjustsFontSizeToFitWidth Eigenschaft auf true, damit das System die Schrift für mich formatiert, während ich die size meines UILabel setze.

Um ein Etikett proportional zur Bildschirmgröße zu machen, können Sie die Autoresizing-Funktion des Storyboards verwenden. Mit den UILabel ausgewählt, wenn es keine bestehenden Einschränkungen gibt, können Sie so etwas wie dies sehen:

enter image description here

im rechten Bereich von Xcode, die Linien klicken, um es ein- oder ausschalten, die vier Linie auf dem Die Seiten werden zeigen, ob die Ansicht ihren Abstand von den Seiten beibehalten wird superview die beiden im Quadrat wird sagen, ob es mit seiner Größe superview in Ihrem Fall ändert, stellen Sie sicher, dass diese wie im Bild oben sind. Wie für die anderen vier, die ich nicht auftrat, können Sie versuchen zu experimentieren, indem Sie ein- oder ausschalten in Kombinationen mit anderen, um das genaue Verhalten zu finden, das Sie wollen.

Wenn Einschränkungen durch Geschwister oder Super/sub Ansichten benötigt werden, kann ich vorschlagen, dass Sie versuchen, eine Reihe von Einschränkungen wie:

  • Etikett (Breite) gleich Super (Breite) - den Multiplikator ändern einstellen gleiche wie Breite
  • beschriften (leading) gleich Super (leading) - - wie viel von dem Raum, den Sie
  • Etikett (Höhe) gleich Super (Höhe) nehmen wollen konstant ändern Abstand einzustellen von der Vorderkante kann bei Bedarf zur Hinterkante wechseln
  • Beschriftung (oben) gleich SuperVi ew (Top) gleich wie leading, kann bei Bedarf in den bottom wechseln.

Es könnte etwas umfangreich sein, vor allem aber zur Kenntnis, die ersten beiden nehmen die Dimensionierung zu erhalten, setzen Sie den Multiplikator der Einschränkungen nicht konstant. Die nächsten beiden dienen hauptsächlich dazu, die Anforderungen zu erfüllen, um Ihr Etikett richtig in der Ansicht zu platzieren. Sie können die Mittelpunkte frei ausrichten oder oben/unten/vorne/hinten in Kombinationen ausrichten, um sie dort zu positionieren, wo Sie möchten.

+0

und was, wenn ich mindestens eine Einschränkung verwenden muss? d. h. das UILabel muss die Hälfte der Gesamtbreite verwenden. – Andre99

+0

In Ihrem angegebenen Beispiel benötigen Sie diese Einschränkung nicht. Wenn Sie die aktuelle Größe von 'UILabel' auf die Hälfte Ihrer' UIView' setzen und die horizontale Skalierung (die Linie mit zwei nach links und rechts zeigenden Pfeilen) umschalten, wird die 'UILabel' immer auf die Hälfte ihrer' Superview' angepasst . Wenn andere Einschränkungen erforderlich sind, müssen Sie möglicherweise eine Weile warten, bis ich meine Antwort für die Verwendung von Einschränkungen verbessert habe. –

+0

das war ein einfaches Beispiel, in meinem Projekt brauche ich wirklich Einschränkungen. – Andre99

0

Meine Swift-Version von kishan godhani Lösung:

let screen = UIScreen.main 
var newFontSize = screen.bounds.size.height * (defaultFont/568.0); 
if (screen.bounds.size.height < 500) { 
    newFontSize = screen.bounds.size.height * (defaultFont/480.0); 
} 
label.font = label.font.withSize(newFontSize)