Ich möchte mehrere Multiline-Etiketten zu einem UIStackView
hinzufügen.UIStackView und abgeschnittene Multilinie UILabels
Aber ich habe immer meine Labels abgeschnitten. Wie in diesem Screenshot gesehen
Aber Ich mag es mehr als hier gezeigt (meine gefälschte Screenshot)
Hier ist mein Code. Zuerst erstelle ich den Eltern/Master StackView, steckt es in eine Scrollview (das den Bildschirm versteckt)
stackView = UIStackView()
stackView.axis = .Vertical
stackView.distribution = .Fill
stackView.spacing = 2
stackView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(stackView)
NSLayoutConstraint.activateConstraints(stackConstraints)
let s1 = createHeaderStackView()
stackView.insertArrangedSubview(s1, atIndex: 0)
let lbl2 = makeLabel()
lbl2.text = "Second One"
stackView.insertArrangedSubview(lbl2, atIndex: 1)
scrollView.setNeedsLayout()
während makeLabel
und makeButton
sind nur Hilfsfunktionen
func makeButton() -> UIButton {
let btn = UIButton(type: .Custom)
btn.backgroundColor = UIColor.lightGrayColor()
return btn
}
func makeLabel() -> UILabel {
let lbl = UILabel()
lbl.font = UIFont.systemFontOfSize(18)
lbl.setContentCompressionResistancePriority(1000, forAxis: .Vertical)
lbl.setContentHuggingPriority(10, forAxis: .Vertical)
lbl.preferredMaxLayoutWidth = scrollView.frame.width
lbl.numberOfLines = 0
lbl.textColor = UIColor.blackColor()
lbl.backgroundColor = UIColor.redColor()
return lbl
}
Die createHeaderStackView
Methode konfigurieren mein StackView, um einen StackView mit all meinen Header-Sachen zu erstellen.
func createHeaderStackView() -> UIStackView {
let lblHeader = makeLabel()
lblHeader.text = "UIStackView"
lblHeader.textAlignment = .Center
let lblInfo = makeLabel()
lblInfo.text = "This is a long text, over several Lines. Because why not and am able to to so, unfortunaltey Stackview thinks I'm not allowed."
lblInfo.textAlignment = .Natural
lblInfo.layoutIfNeeded()
let lblInfo2 = makeLabel()
lblInfo2.text = "This is a seconds long text, over several Lines. Because why not and am able to to so, unfortunaltey Stackview thinks I'm not allowed."
lblInfo2.textAlignment = .Natural
lblInfo2.layoutIfNeeded()
let btnPortal = makeButton()
btnPortal.setTitle("My Button", forState: .Normal)
btnPortal.addTarget(self, action: "gotoPushWebPortalAction", forControlEvents: .TouchUpInside)
let headerStackView = UIStackView(arrangedSubviews: [lblHeader, btnPortal, lblInfo, lblInfo2])
headerStackView.axis = .Vertical
headerStackView.alignment = .Center
headerStackView.distribution = .Fill
headerStackView.spacing = 2
headerStackView.setContentCompressionResistancePriority(1000, forAxis: .Vertical)
headerStackView.setContentHuggingPriority(10, forAxis: .Vertical)
headerStackView.setNeedsUpdateConstraints()
headerStackView.setNeedsLayout()
//headerStackView.layoutMarginsRelativeArrangement = true
return headerStackView
}
so eine lange Geschichte kurz zu machen: Was sind meine stackviews anzupassen benötigt wird, so dass jeder stackview und wird daher Etikett in voller herrlicher Größe gezeigt? Ich versuchte alles zu komprimieren und zu umarmen, aber es schien nicht zu funktionieren. Und uistackview uilabel multiline truncated Googeln scheint eine Sackgasse zu sein, auch
Ich schätze jede mögliche Hilfe, Grüße Flori
Wie in http://stackoverflow.com/questions/34386528/multiline-label-in-uistackview/34430212#34430212 gezeigt, ist der Schlüssel, eine feste Breite für Ihre Stapelansicht festzulegen, um Ihrem mehrzeiligen Etikett etwas zu geben hineinrennen und mehrzeilig werden. – GlennRay
@SpaceDog imho sie sind nicht schlecht geplant, aber sie haben andere Logik als andere Steuerelemente, die eine andere Art des Denkens für komplexere Layouts erfordert, vor allem wegen ihrer Füllregeln –