UIStackView y UILabels multilínea truncada

Quiero agregar varias tags multilínea a un UIStackView .

Pero siempre acabo con mis tags truncadas. Como se ve en esta captura de pantalla truncado como es

Pero me gusta tenerlo más como se muestra aquí (mi pantalla falsa) truncado como debería ser

Aquí está mi código. Primero creo el padre / maestro StackView, lo pongo en un ScrollView (que está ubicado en la pantalla)

  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() 

mientras makeLabel y makeButton son solo funciones auxiliares

 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.prefernetworkingMaxLayoutWidth = scrollView.frame.width lbl.numberOfLines = 0 lbl.textColor = UIColor.blackColor() lbl.backgroundColor = UIColor.networkingColor() return lbl } 

El método createHeaderStackView consiste en configurar mi StackView para poner dentro de un StackView todas las cosas de mi encabezado.

 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 } 

así que para hacer una larga historia corta: ¿Qué se necesita para ajustar mis vistas de stack, por lo que cada stackview y por lo tanto la label se muestra con un tamaño glorioso? Traté de comprimir y abrazar todo, pero no parecía funcionar. Y Google truncado uistackview uilabel multiline truncado parece ser un callejón sin salida, también

Aprecio cualquier ayuda, saludos Flori

Debes especificar las dimensiones de la vista de stack. La label no se "desbordará" en la siguiente línea si las dimensiones de la vista de stack son ambiguas.

Este código no es exactamente el resultado que desea, pero obtendrá la idea:

 override func viewDidLoad() { super.viewDidLoad() let stackView = UIStackView() stackView.axis = .Vertical stackView.distribution = .Fill stackView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(stackView) let views = ["stackView" : stackView] let h = NSLayoutConstraint.constraintsWithVisualFormat("H:|-50-[stackView]-50-|", options: [], metrics: nil, views: views) let w = NSLayoutConstraint.constraintsWithVisualFormat("V:|-100-[stackView]-50-|", options: [], metrics: nil, views: views) view.addConstraints(h) view.addConstraints(w) let lbl = UILabel() lbl.prefernetworkingMaxLayoutWidth = stackView.frame.width lbl.numberOfLines = 0 lbl.text = "asddf jk;v ijdor vlb otid jkd;io dfbi djior dijt ioure fi;or dfuu;nfg ior mf;drt asddf jk;v ijdor vlb otid jkd;io dfbi djior dijt ioure f infg ior mf;drt asddf jk;v ijdor vlb otid jkd;io dfbi djior dijt ioure fi;or dfuu;nfg ior mf;drt " dispatch_async(dispatch_get_main_queue(), { stackView.insertArrangedSubview(lbl, atIndex: 0) }) }