UIScrollView のスクロール可能なコンテンツのサイズがあいまい 質問する

UIScrollView のスクロール可能なコンテンツのサイズがあいまい 質問する

開発者の皆さん、Interface Builder (Xcode 5 / iOS 7) の AutoLayout で問題が起きています。これは非常に基本的で重要なので、これが適切に機能する方法を誰もが知っておくべきだと思います。これが Xcode のバグであれば、重大なものです。

そのため、次のようなビュー階層があると、必ず問題が発生します。

>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)

UIScrollView には、すべての側から 50 ピクセルなど、確実な制約があります (問題なし)。次に、UILabel に上部スペース制約を追加します (問題なし) (ラベルの高さ/幅を固定することもできます。何も変わりませんが、ラベルの固有のサイズのため不要です)

UILabel に末尾の制約を追加すると、問題が発生します。

例: 末尾のスペース: Superview 等しい: 25

ここで 2 つの警告が発生しますが、その理由はわかりません。

A)スクロール可能なコンテンツのサイズがあいまい (スクロール ビューではスクロール可能なコンテンツの高さ/幅があいまいです)

B)誤ったビュー(ラベル 予想: x= -67 実際: x= 207

この最小限の例は、ダウンロード可能な新しいプロジェクトで実行し、スクリーンショットを添付しました。ご覧のとおり、Interface Builder では、ラベルが UIScrollView の境界 (オレンジ色の破線の四角形) の外側にあることが想定されています。ラベルのフレームを Resolve Issues Tool で更新すると、ラベルがそこに移動します。

注意: UIScrollView を UIView に置き換えると、動作は期待どおりになります (ラベルのフレームは正しく、制約に従います)。したがって、UIScrollView に問題があるか、重要なことを見落としているようです。

IB の提案どおりにラベルのフレームを更新せずにアプリを実行すると、ラベルは正しい位置に配置され、UIScrollView はスクロール可能です。フレームを更新すると、ラベルは見えなくなり、UIScrollView はスクロールしません。

助けてオビ=ワン・ケノービ!なぜあいまいなレイアウトなのですか?なぜ間違った位置にビューがあるのですか?

ここからサンプル プロジェクトをダウンロードして、何が起こっているのか理解できるかどうか試してみてください。https://github.com/Wirsing84/AutoLayoutProblem

インターフェースビルダーにおける問題の図解

ベストアンサー1

更新しました

現在、Apple は私たちが何年も前に解決した問題に気づき (lol_face)、コンテンツ レイアウト ガイドフレーム レイアウト ガイドをの一部として提供していますUIScrollView。そのため、次の手順を実行する必要があります。

  1. 以下の元の回答と同じです。

  2. このためcontentView、スクロール ビューのコンテンツ レイアウト ガイドに固定して、上、下、左、右の余白を 0 に設定します。

  3. 次に、contentViewの高さをフレーム レイアウト ガイドの高さと同じに設定します。幅についても同様に設定します。

  4. 最後に、等しい高さの制約の優先度を250に設定します(ビューを垂直方向にスクロールし、幅を水平方向にスクロールする必要がある場合)。

終了した

これで、 にすべてのビューを追加できるようになりましたcontentViewcontentSizescrollViewは に応じて自動的にサイズ変更されますcontentView

contentView最後のオブジェクトの下部から の余白までの制約を設定することを忘れないでくださいcontentView

オリジナル [非推奨]

そこで私は次のように整理しました:
  1. 内に を追加UIScrollView しますUIView( と呼ぶこともできますcontentView)。

  2. この ではcontentView上、下、左、右の余白を 0 に設定します(もちろん でscrollViewあるからsuperView)。また、水平方向と垂直方向の中央揃えを設定します

おすすめ記事