2016-11-09 10 views
1

スーパービューの先頭と末尾のエッジ(余白ではない)に固定する制約を持つUIScrollViewがあります。このスクロールビューでは、最初にスクロールビューの全幅に設定するUIImageがあります。 iPhone 7では正しく動作し、画像は全幅ですiOSスクロールビューの境界がスーパービューの境界と等しくない

iPhone 7 Plusでは、画像の端と画面の端の間に隙間があります。スクロールビューは、画像をズームしたときに右端に移動するときのように全幅です。

私は

imageView.frame = scrollView.bounds imageView.contentMode = .scaleAspectFill

を設定することにより、スクロールビューの幅に合わせて、画像を取得しています問題は、スクロールビューの境界であると思われます。 iPhone 7 Plusでは、スクロール・ビューの幅は375と報告されていますが、画面の幅は414と報告されています。iPhone 7ではスクロール・ビューの幅は375、画面の幅も375です。

これはなぜ?私は何かを誤解していると確信しています!

+0

はどこに 'imageView'の枠を設定するためにそのコードを使用していますか? – alexburtnik

+0

両方の行がビューコントローラのviewDidLoad関数にあります –

答えて

1

imageViewのフレームを設定するときにscrollViewのフレームがまだ更新されていない可能性があります。

viewDidLayoutSubviews代わりにレイアウトコードを移動しよう:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    imageView.frame = scrollView.bounds 
} 
+0

コントローラのライフサイクルを読み返す必要があるようです。 –

+2

@TomReay 'viewDidLoad'は、ビューが作成されたときに呼び出されますが、階層にも追加されませんあなたはそこのどのフレームにも頼ることはできません。実際、iOS 10では、すべてのフレームがストーリーボードの内容と同じではなく、デフォルトでは1000 * 1000であり、開発者にあなたのような問題を処理させるよう強制します。 – alexburtnik