Ich versuche, Text in einer UILabel-Ansicht automatisch zu formatieren. Der Text (z. B. "abcdefghij") enthält zehn Zeichen. Ich möchte es in einer einzigen Zeile anzeigen. Ich habe die Größenklasse und das automatische Layout aus praktischen Gründen deaktiviert und die folgenden Codes hinzugefügt, um den Text auf dem UILabel zu formatieren. Es sollte zehn Zeichen in einer Zeile enthalten, und die Breite des UILabels ist gleich der Breite des Geräts.Wie viel Pixel verbraucht ein Charakter in iOS?
let screenWidth = UIScreen.mainScreen().bounds.width
labelView.frame = CGRect(x: labelView.frame.origin.x, y: labelView.frame.origin.y, width: screenWidth, height: labelView.frame.height)
let string = "abcdefghij"
let stringLength = CGFloat(string.characters.count)
let characterSize = keyboardView.font.pointSize
let characterSpacing = (screenWidth - characterSize * stringLength)/stringLength
let content = NSAttributedString(string: string, attributes: [NSKernAttributeName: characterSpacing])
keyboardView.attributedText = content
Aber es stellt sich so heraus. The width of string is not equal to the screen
Ich denke, das einzige könnte hier falsch sein ist die pointSize. Es entspricht 13,8, während ich die Schriftgröße auf 17 setze. Ich verstehe es nicht. Gib mir bitte ein paar Hinweise. Danke für Ihre Aufmerksamkeit.
Mit Hilfe sizeWithAttributes
und boundingRectWithSize(_:options:context:)
habe ich endlich herausgefunden, wie es funktioniert. Aber mein ursprünglicher Zweck besteht darin, die 10 Zeichen in eine Zeile zu passen. Der Code sollte den Abstand zwischen den Zeichen berechnen und der gesamte Speicherplatz muss dieselbe Größe haben. Können Sie mir Ratschläge geben? This is what I want to make
Sie wollen also die Breite der Zeichen berechnen? – luiyezheng
'Ich habe die Größenklasse und Auto-Layout für die Bequemlichkeit ausgeschaltet '- schalten Sie sie wieder ein. Aus keinem anderen Grund als der Bequemlichkeit, keine große Nachschlagetabelle haben zu müssen, die Schriftart Gesicht + Größe mit Höhen kombiniert (und dann immer noch auf die Breite raten muss). – nhgrif
Die Antwort ist "es hängt von den Charakteren ab". iOS verwendet proportionale Schriftarten, so dass ein Buchstabe wie "I" viel weniger Platz benötigt als ein Buchstabe wie "W". Sie können 'sizeWithAttributes' verwenden - http://stackoverflow.com/questions/24141610/cgsize-sizewithattributes-in-swift – Paulw11