UIStackView
に複数の複数行のラベルを追加したいとします。UIStackViewと切り捨てられた複数行のUILabels
しかし、私はいつも私のラベルが切り捨てられてしまいます。このスクリーンショット
(私の偽造スクリーンショット)ここに示すように持つことが好きなようにここに私のコードです。最初に私はmakeLabel
とmakeButton
がcreateHeaderStackView
方法で構成することであるだけで、ヘルパー関数
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
}
ている間(画面に隠れている)ScrollViewに
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()
をそれを置く、親/マスターStackViewを作成します私のStackViewはすべての私のヘッダーのものとStackViewの中に入れます。
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
}
ので、長い話を短くするために:私のstackviewsを調整するために必要なものなので、各stackviewため、ラベルが完全な栄光のサイズに示されていますか?私はすべてを圧縮して抱き締めようとしましたが、うまくいかないようでした。そしてuistackview uilabel multiline truncatedをグーグルでは、私は任意の助けに感謝あまりに
、行き止まりのようです、 はあなたがスタックビューの大きさを指定する必要がフローリ
http://stackoverflow.com/questions/34386528/multiline-label-in-uistackview/34430212#34430212に示されているように、キーはスタックビューの固定幅を設定して、マルチラインラベルに何かを与えることです走り回って複数のラインになる。 – GlennRay
@SpaceDog imho彼らはあまり計画されていませんが、より複雑なレイアウトのための異なる考え方を必要とする他のコントロールとは異なるロジックを持っています。特にフィルルール –