2016-10-15 9 views
0

サブビューを使用するのは初めてですが、何らかの理由で制約を追加してscrollViewにサブビューを表示しません。 .frameを使用している場合にのみ機能します。私のコードを見て、私に知らせてください。

ありがとうございます。SwiftはUIScrollViewサブビューに制約を追加します

let scrollView = UIScrollView() 
let myView = UIImageView() 

override func viewDidLoad() { 

    view.addSubview(scrollView) 
    scrollView.backgroundColor = .red 
    scrollView.translatesAutoresizingMaskIntoConstraints = false 
    scrollView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 0).isActive = true 
    scrollView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: 0).isActive = true 
    scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true 
    scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true 

    scrollView.addSubview(myView) 
    myView.backgroundColor = .brown 
    myView.translatesAutoresizingMaskIntoConstraints = false 
    myView.leftAnchor.constraint(equalTo: scrollView.leftAnchor, constant: 0).isActive = true 
    myView.rightAnchor.constraint(equalTo: scrollView.rightAnchor, constant: 0).isActive = true 
    myView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 0).isActive = true 
    myView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0).isActive = true 
} 
+0

あなたはプレーン 'UIView'に' UIImageView'を変更した場合は、んそれは現れる? – NRitH

+0

すべてのビューは同じように動作します。その周りの方法は、スクロールビューの中にトップアンカーを持って、それを左に持って、これを奇妙な 'view'の右アンカーにして、このように振る舞います。 – pprevalon

答えて

0

これは、UIScrollViewのサイズが、autolayoutを使用しているときの親子に関係しているために発生しています。

スクロールビューのフレームがルートビューの端に固定されていることを確認します(スクロールビューとその親の間にある)。

(スクロールビューとその子の間の)2番目の制約セットは、スクロールビューのコンテンツサイズがサブビューのサイズと等しいことを保証しています。本質的に、この制約は、サブビューのフレームではなく、スクロールビューのコンテンツサイズの変更を終了させます。サブビューは空白であり、その大きさは、これがこの現象は、このtechnical noteのビットを説明するscrollview 0

print(scrollView.frame) 
(0.0, 0.0, 414.0, 736.0) 
print(scrollView.bounds) 
(0.0, 0.0, 414.0, 736.0) 
print(scrollView.contentSize) 
(0.0, 0.0) 
print(myView.frame) 
(0.0, 0.0, 0.0, 0.0) 

のコンテンツのサイズを作る0であるので、コンテンツがありません。あなたが本当にしたいことはscrollviewのフレーム全体を埋めるために子ビューにある場合は、明示的にそれを行うことができます

myView.heightAnchor.constraint(equalTo: scrollView.heightAnchor).isActive = true 
myView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true 
関連する問題