開発者の皆さん、Interface Builder(Xcode 5 / iOS 7)のAutoLayoutに問題があります。これは非常に基本的で重要なので、これが正しく機能する方法を誰もが知っておくべきだと思います。これがXcodeのバグである場合、それは重大なバグです!
したがって、このようなビュー階層があるときはいつでも問題が発生します。
>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)
UIScrollViewには、すべての側面から50ピクセルなどの制約があります(問題ありません)。次に、UILabelにTop Space制約を追加します(問題ありません)(そして、ラベルの高さ/幅を固定することもできますが、何も変更しませんが、Labelの固有のサイズのために不要になるはずです)。
UILabelに末尾の制約を追加すると、問題が発生します。
例:末尾のスペース:スーパービュー等しい:25
ここで2つの警告が発生します-その理由がわかりません。
A)スクロール可能なコンテンツサイズのあいまいさ(スクロールビューには、スクロール可能なコンテンツの高さ/幅があいまいです)
B)ビューの配置ミス(予想ラベル:x = -67実際:x = 207)
私はこの最小限の例を、新しくダウンロードできる新しいプロジェクトで実行し、スクリーンショットを添付しました。ご覧のとおり、Interface Builderは、LabelがUIScrollViewの境界(オレンジ色の破線の長方形)の外側にあると想定しています。問題解決ツールでラベルのフレームを更新すると、ラベルがすぐに移動します。
注:UIScrollViewをUIViewに置き換えると、動作は期待どおりになります(ラベルのフレームは正しく、制約に従います)。したがって、UIScrollViewに問題があるか、何か重要なことを見逃しているようです。
IBで提案されているように、ラベルのフレームを更新せずにアプリを実行すると、正確に、正確に配置され、UIScrollViewはスクロール可能です。フレームを更新すると、ラベルが見えなくなり、UIScrollViewがスクロールしません。
オビ=ワン・ケノービを助けて!なぜあいまいなレイアウトなのですか?なぜ見当違いの表示ですか?
ここでサンプルプロジェクトをダウンロードして、何が起こっているのかを理解できるかどうか試してください:https : //github.com/Wirsing84/AutoLayoutProblem
UIScrollView
直接使用しないことです。代わりに、UICollectionView
またはUITableView
可能な限り使用して、ほとんどすべてのことがこれらの要素で可能であり、シンプルさ、可読性、再利用性も提供します!!!