2017-04-19 7 views
0

私はUIImageViewを持っています(実際はFLAnimatedImageViewです)。私は自動レイアウトを使用して、画面全体を占めるように制約を設定します。これはiPhoneでもうまくいきますが、iPadではコンテンツの自動作成された制約(画面に表示されている)によって画面のサイズの一部しか使用されません。UIImageView自動作成されたコンテンツサイズの自動レイアウトの制約が後続/先行制約と重複しています

なぜこれらの制約が作成されているのかわかりませんが、実際に必要な場合は、なぜ後続/先行制約に従わないのですか?

constraints

The image only taking some of the screen's size

答えて

1

私はあなたのビューのソースをGoogleで検索してGitHubでそれを見つけました。

- (CGSize)intrinsicContentSize 
{ 
    // Default to let UIImageView handle the sizing of its image, and anything else it might consider. 
    CGSize intrinsicContentSize = [super intrinsicContentSize]; 

    // If we have have an animated image, use its image size. 
    // UIImageView's intrinsic content size seems to be the size of its image. The obvious approach, simply calling `-invalidateIntrinsicContentSize` when setting an animated image, results in UIImageView steadfastly returning `{UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric}` for its intrinsicContentSize. 
    // (Perhaps UIImageView bypasses its `-image` getter in its implementation of `-intrinsicContentSize`, as `-image` is not called after calling `-invalidateIntrinsicContentSize`.) 
    if (self.animatedImage) { 
     intrinsicContentSize = self.image.size; 
    } 

    return intrinsicContentSize; 
} 

animatedImageの場合にはサイズが元の画像サイズに縮小されるであろうと思わ: 実装に見た後、私は次のコードを発見しました。

リンゴのドキュメントは、固有のコンテンツサイズについて伝えます:一般的に

、本来のコンテンツサイズを使用すると、これは本質的な内容として解釈することができ

を必要とする制約の数を減らし、レイアウトを簡素化サイズの使用法はすでにサイズの制約を追加しています。本来のコンテンツサイズの使用に関する詳細情報については以下を参照してください

override var intrinsicContentSize: CGSize { 
    return CGSize(width: UIViewNoIntrinsicMetric, height: UIViewNoIntrinsicMetric) 
} 

をところで:(いくつかの副作用があるかどうかわからない)Apple Documentation

一つの解決策は、そのように固有のコンテンツのサイズをオーバーライドするサブクラスを使用するようになります。次の質問の情報源へのリンクを提供してください。それは、それを探し出す時間を節約します。ありがとう!

0

受け入れられた回答は、これらの自動制約が作成されないという解決策を提供しますが、私の見解を切り詰める問題は異なりました。

私はviewDidLoadにビュー設定(ストーリーボード経由ではありません)を行っていましたが、ビューの境界変更は有効になりません。

viewDidLayoutSubviewsのロジックを実装すると(画像ビューの幅に依存する画像ビューの中央にプログレスバーなどのビューを追加するなど)、私は制約が有効になり、UIImageViewの幅がその時点で正しくframe.size.widthと表示されています。 viewDidLayoutSubviews公式ドキュメントから

View Controllerのビューの境界の変更、ビューはサブビューの位置を調整して、システムがこの方法

出典呼び出す:Apple Docs

関連する問題