2017-09-30 15 views
3

私はUIStackViewを垂直方向にスクロールさせてUIScrollView内にあり、すべてが自動レイアウトを使用して制約されています。スクロールビューはスーパービューを塗り潰し、スタックビューはスクロールビューを塗りつぶし、さまざまな要素がスタックビューに追加されます。これをオートレイアウトでうまく再生し、スクロールビューのコンテンツサイズを定義するには、スタックビューの幅も指定する必要があります。これは、スタックビューにスクロールビューの幅に等しい幅制約を追加することによって行われます。この時点では何もあいまいではなく、まったく同じように動作します。スクロールでスタックビューを使用し、セーフエリアのインセットを守ります

要素が画面の左端と右端まで伸びないように余白を追加する場合は、スタックビューの先頭と末尾の制約定数を両側に15pt挿入するように変更できます例えば。しかし、等幅の拘束定数を必ず-30に変更する必要があります。スクロール可能なコンテンツを挿入しても画面の端からスクロールしてスクロールできます

コンテンツが住宅用センサーの下に置かれているため、iPhone Xが登場し、ランドスケープでは15フィートの埋め込みでは不十分です。したがって、これを更新して、安全領域のレイアウトマージンを尊重するように余白を設定する必要があります。あなたは本当にデフォルトのマージンを使いたいだけです。スタックビューの先頭と末尾の制約定数を変更して、ビューのレイアウトマージン(セーフエリアのインセットを考慮)を使用することはできますが、等しい幅の制約定数がマージンの2倍でなく、マージンが動的であるため機能しません今。

これを解決する1つの方法は、スタックビューの先頭と末尾と幅の制約のためにIBOutletを作成し、レイアウトマージンが変更されたときにすべてプログラムで調整することです(viewLayoutMarginsDidChange)。しかし、より良いアプローチがあるのか​​、私は心配しています。Interface Builderでコード内で動作するソリューションが望ましいでしょう。

+0

私のiPhone Xストーリーボードの「この制約を使用するだけでなく、この他のものを追加するか、この定数を変更する」という良い方法は見つかりませんでした。私はあなたが正しいアイデアを持っていると思う:アウトレットを追加し、それに応じてあなたの定数を微調整する。しかし、ちょっとした騒ぎ。 – cbowns

答えて

1

これをInterface Builderで完全に行う方法が見つかりました。スクロールビュー内にスタックビューを直接埋め込むのではなく、内容ビューとなるようにスクロールビュー内にUIViewを追加します。ゼロ、スクロールビューと同じ幅制約の定数を持つスーパービューに等しいすべての先頭、末尾、上、下の制約を作成します。次に、このコンテンツビュー内にスタックビューを埋め込みます。スーパービューのマージン¹に加えて、スタックビューの先頭と末尾の制約を作成します。

だからあなたのセットアップは次のようになります。これは、あなたが左右の端にスクロールすることができ風景にiPhone X上で保証されます

- view 
-- scroll view 
--- view 
---- stack view 

、スクロールバーは、画面の一番右端に配置され、スタックビューは安全領域内に配置されます。

¹私は8の定数が正しいと感じるのに十分な詰め物を加えることを発見しました。

+0

アップアップ投票。私の唯一の追加は、そのようなマージンが安全な領域に関連していることを確認することです。 – keeshux

関連する問題