1. ホーム
  2. アイオス

[解決済み】UIScrollView Scrollable Content Size Ambiguity

2022-03-23 13:59:58

質問

開発者の皆さん。 Interface Builder (Xcode 5 / iOS 7)のAutoLayoutで困っています。 とても基本的で重要なことなので、これがどのように正しく機能するのか、誰もが知っているはずだと思います。もしこれがXcodeのバグだとしたら、致命的なものです。

で、このようなビュー階層を持つたびにトラブルに見舞われるのです。

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

UIScrollViewには、例えば、すべての側面から50pxという固定の制約があります(問題なし)。 それから、UILabelにTop Space制約を追加します(問題なし)(ラベルの高さ/幅を固定することもできますが、ラベルの固有のサイズのため、何も変わりません。)

問題は、UILabelに末尾の制約を追加したときから始まります。

例)Trailing Space to: スーパービュー イコール: 25

今度は2つの警告が発生しました - なぜなのか理解できません。

A) スクロール可能なコンテンツのサイズが不明確(スクロールビューのスクロール可能なコンテンツの高さ/幅が不明確)。

B) 誤視聴(ラベル 期待値:x= -67 実績値:x= 207

この最小限の例は、ダウンロードできる新しいプロジェクトで行い、スクリーンショットを添付しました。見ての通り、Interface BuilderはLabelがUIScrollViewの境界(オレンジの破線長方形)の外側にあることを想定しています。Resolve Issues ToolでLabelのフレームを更新すると、Labelはちょうどその位置に移動します。

注意:UIScrollViewをUIViewに置き換えると、予想通りの動作になります(ラベルのフレームは正しく、制約に従います)。つまり、UIScrollViewに問題があるか、私が何か重要なことを見逃しているかのどちらかだと思われます。

IBが提案したように、Labelのフレームを更新せずにアプリを実行すると、それは正確にあるべき場所に配置され、UIScrollViewはスクロール可能です。 フレームを更新すると、Labelは見えなくなり、UIScrollViewはスクロールしなくなります。

助けてオビ=ワン・ケノービ!?なぜ曖昧なレイアウトなのでしょうか?なぜ、見当違いの表示なんだ?

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

解決方法は?

というわけで、このように整理してみました。

  1. の中は UIScrollView 加える a UIView (それを contentView );

  2. この中で contentView , 上下左右の余白を0に設定する (もちろん scrollView というのは superView ); 水平・垂直方向にもアライメントセンターを設定する ;

完成 .

これで、すべてのビューを contentView で、その contentSizescrollView に従って自動的にリサイズされます。 contentView .

更新しました。

いくつかの特殊なケースは、これでカバーされています ビデオ 投稿者 セルジオ を以下のコメント欄にご記入ください。