2016-09-28 4 views
0

に制約をプログラムでスクロールビュー内のUIViewを追加しようとする時に失敗します。私はちょうどシミュレータのUIViewが表示されません。 私はUIScrollviewにIBOutletを持っています...だから私はなぜこの問題に取り組んでいるのか分かりません。だから私は制約をプログラム的にUIScrollViewのにUIViewのを追加しようとしてきたSWIFT

override func viewDidAppear(animated: Bool) { 

let ownerUIView:UIView! = UIView() 
     var innerLabel:UILabel = UILabel() 
     ownerUIView.translatesAutoresizingMaskIntoConstraints = false 
     innerLabel.translatesAutoresizingMaskIntoConstraints = false 
     innerLabel.text = "Test text" 
     ownerUIView.addSubview(innerLabel) 
     importantScroll.addSubview(ownerUIView) 
     ownerUIView.backgroundColor = UIColor.blueColor() 

     let constraint1 = NSLayoutConstraint(item: ownerUIView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: importantScroll, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 10) 
     let constraint2 = NSLayoutConstraint(item: ownerUIView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: importantScroll, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 10) 
     let constraint3 = NSLayoutConstraint(item: ownerUIView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 60) 
     let constraint4 = NSLayoutConstraint(item: ownerUIView, attribute: .Top , relatedBy: .Equal, toItem: importantScroll, attribute: NSLayoutAttribute.Top , multiplier: 1, constant: 20) 

     NSLayoutConstraint.activateConstraints([constraint1,constraint2,constraint3,constraint4]) 

} 

私は制約を削除しても、UILabelまたはUIVIewは表示されません。 UILableを削除すると、青いUIViewが表示されます。

let ownerUIView:UIView = UIView(frame: CGRect(x: 10, y: 10, width: 200, height: 200)) 
     let innerLabel:UILabel = UILabel(frame: CGRect(x: 10, y: 10, width: 100, height: 100)) 
     ownerUIView.translatesAutoresizingMaskIntoConstraints = false 
     innerLabel.translatesAutoresizingMaskIntoConstraints = false 
     innerLabel.text = "Test text" 
     ownerUIView.addSubview(innerLabel) 
     importantScroll.addSubview(ownerUIView) 
     ownerUIView.backgroundColor = UIColor.blueColor() 

答えて

0

私はあなたが任意の適切な幅の制約が存在しなくなるまで、あなたのscrollviewのコンテンツサイズを決定することはできませんのでごownerViewとimportantScollの間に等しい幅の制約を設定する必要があると思います。この行を追加することができます。

let constraint5 = NSLayoutConstraint(item: ownerUIView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: importantScroll, attribute: NSLayoutAttribute.Width, multiplier: 1.0, constant: 0.0) 
NSLayoutConstraint.activateConstraints([constraint1,constraint2,constraint3,constraint4,constraint5]) 

更新: それはかなり一般的であるScrollViewで複数のサブビューをレイアウトする際Scrollviewの内部に別のコンテナのUIViewを追加します。そこで、最初にストーリーボードにコンテナUIViewを追加しました。 ContainerViewにはscrollViewと同じ幅と高さの制約があり、4つの制約を追加してContainerViewをScrollViewに制約しました。最後に、以下のようにプログラム的に制約を設定します。

let constraint6 = NSLayoutConstraint(item: ownerView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: containerView, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 40) 
let constraint7 = NSLayoutConstraint(item: containerView, attribute: .Tailing, relatedBy: .Equal, toItem: ownerView, attribute: .Trailing, multiplier: 1, constant: 10) 
let constraint8 = NSLayoutConstraint(item: ownerView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 60) 
let constraint9 = NSLayoutConstraint(item: ownerView, attribute: .Top , relatedBy: .Equal, toItem: containerView, attribute: NSLayoutAttribute.Top , multiplier: 1, constant: 20) 

containerView.addConstraints([constraint6,constraint7,constraint8,constraint9]) 
+0

こんにちは、ありがとうございました...そこに10マージンにUIViewの右側を取得する方法はありますか? – BostonMacOSX

+0

プログラムで制約を設定する理由はありますか?ストーリーボードに自動レイアウトを適用すると、非常に簡単になります。この[リンク](https://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/)を参照することができます。 – woogii

+0

@BostonMacOSX私の答えを更新しました。 – woogii

関連する問題