Ich habe ein Beispielprojekt erstellt, um dies zu reproduzieren.Autolayout Hinzufügen von zusätzlicher Polsterung oben und unten von UILabel iPhone 6/6 +, wenn preferredMaxLayoutWidth
Ich habe eine XIB-Datei mit einem UILabel mit einer festen oberen, führenden und nachfolgenden Einschränkung. Ich habe eine MinHeight-Einschränkung hinzugefügt und die Anzahl der Zeilen auf 0 gesetzt.
Ich legte die preferredMaxLayoutWidth auf Automatisch (in der XIB-Datei überprüft).
In viewDidLoad, ich habe dies:
self.myLabel.layer.borderColor = [[UIColor redColor] CGColor]; self.myLabel.layer.borderWidth = 2.0f;
self.myLabel.text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
Und wenn ich den Simulator auf iPhone 6 oder 6+ laufen, bekomme ich diese:
Ich habe keine Ahnung, woher diese obere und untere Polsterung kommt und ist proportional zu th Die Anzahl der Zeichen in UILabel wird angezeigt.
Gibt es eine magische Einstellung, die ich vergessen habe? Es läuft gut auf iPhone 4 "Geräte.
Wenn ich jetzt nicht die preferredMaxLayoutWidth, hat es nicht die zusätzliche Polsterung, aber das bricht meine Multi-Zeilen in der UILabel. Es schneidet den Text. Ich tat verwendet Größe-Klasse nicht
Edit:..
Also änderte ich einige Dinge in meinem Beispielprojekt die Situation auf meinem realen Projekt passen ich habe eine Tableview (mit oben hinzugefügt, den führenden, Boden und trailing constraints auf die übergeordnete Ansicht gesetzt. Jede Zelle in der tableView hat 4 Label. Das obere Label hat eine obere, führende und nachstehende Einschränkung für die contentView der Zelle und die nachfolgenden Labels haben eine Vertic al Einschränkung auf das Etikett darüber. Für jedes Label gibt es einen heightGreaterThan-Constraint-Satz und einen widthGreaterThan-Satz.
So sieht es ohne den preferredMaxLayoutWidth-Satz aus (Beachten Sie, wie Beschriftungen auf 1 Zeile begrenzt sind).
Mit preferredMaxLayoutWidth. Jetzt zeigt das UILabel den gesamten Inhalt, hat aber oben und unten eine Auffüllung.
Edit2: Beispielprojekt: https://www.dropbox.com/s/sdahx9njnsxiv98/MultiLineUILabel.zip?dl=1
ich genau das gleiche Problem wie Sie. Ich habe sogar versucht, die 'preferredMaxLayoutWidth' durch Hinzufügen einiger Pixel zu hacken, aber diese Zahl hängt stark davon ab, wie breit der Bildschirm ist und rendert auf iPhone 6, iPhone 6+ und iPhone 5. Ganz zu schweigen von iPad. Nicht sicher, ob es sich um einen Fehler handelt oder ob es andere Einstellungen/Hacks gibt, damit es funktioniert. –
Ich hatte das gleiche Problem und ich habe nicht Auto-Layout verwendet. Das Problem trat nur auf dem iPhone 6 und nicht auf dem iPad auf. Keine Kombination von Autoresize-Maskeneinstellungen machte einen Unterschied. Schließlich habe ich das Problem gelöst, indem ich einen Clean, Restart XCode und Rebuild gemacht habe. Seltsam, aber es löst das Problem, wo ein Clean alleine nicht wäre. XCode 6.1.1. – JasonD
Stellen Sie sicher, dass die bevorzugte Breite des Labels auf "Automatisch" eingestellt ist und dass "Explizit" im Einstellungsfenster nicht aktiviert ist. Dies löste das Problem für mich bei der Verwendung von Autotuning. – AndyC