3

iPhone 6 の画面では正しく表示されるビューがありますが、iPhone 5 の画面ではスクロールが必要です。自動レイアウトの制約を変更して、後者をスクロールする必要をなくそうとしています。

私の状況を視覚的に説明する試みは次のとおりです。 ここに画像の説明を入力

最初の 2 つのスクリーンショットは、iPhone 6 と iPhone 5 の既存の状況です。3 番目のスクリーンショットは、私が達成しようとしているものです (iPhone 5 のみ)。

次の自動レイアウト制約を書きましたが、ここに何かが欠けています:


[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=25,<=50)-[blueView]-(>=25,<=50)-[redView]-5-|"
                                                             options:0
                                                             metrics:nil
                                                               views:nameMap]];

ここでハグおよび/または圧縮抵抗を使用する必要がありますか? どのように?


編集して、実際のコードをさらに表示します。

[self addSubview:loginNSignupScrollView];
[self.loginNSignupScrollView addSubview:logoImageView];
[self.loginNSignupScrollView addSubview:horizo​​ntalScrollView];
[self.loginNSignupScrollView addSubview:appVersionLabel];
[self.horizo​​ntalScrollView addSubview:loginView];

[self addConstraints:[NSLayoutConstraint constraintWithVisualFormat:@"V:|[loginNSignupScrollView]|" オプション:0 メトリック:なし ビュー:nameMap]];

[self addConstraints:[NSLayoutConstraint constraintWithVisualFormat:@"V:|[loginView(==350)]" オプション:0 メトリック:なし ビュー:nameMap]];

[self addConstraints:[NSLayoutConstraint constraintWithVisualFormat:@"V:|-(>=30,<=60)-[logoImageView(==35)]-(>=25,<=50)-[horizo​​ntalScrollView]-30-[ appVersionLabel]-5-|" オプション:0 メトリック:なし ビュー:nameMap]];

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.horizo​​ntalScrollView 属性:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self 属性:NSLayoutAttributeHeight 乗数:0.0 定数:350]];

4

2 に答える 2

5

ご存知のように、スクロール ビューは特別です。なぜなら、それらの内部で自動レイアウトを使用すると、コンテンツ サイズ (スクロール可能なコンテンツのサイズ) が内側から外側への制約によって決定されるからです。したがって、やろうとしていることを直接行うことはできません。より良い戦略は次のとおりです。

  • スーパービュー (メイン ビュー) に固定されたスクロール ビュー

  • ゼロの定数でスクロール ビューに固定された、スクロール ビュー内の空白のコンテンツ ビュー

  • その他すべて、コンテンツ ビュー内

これを設定すると、次の 2 つの良いことが起こります。

  • コンテンツ ビューのサイズ、スクロール ビューのcontentSize. したがって、明示的に設定するだけです。合理的なアプローチは、コード内で設定することviewDidLayoutSubviewsです。これは、真の最終的なインターフェイス サイズが判明する最も早い時期です。

  • コンテンツ ビューのサブビューの制約は通常の制約になり、コンテンツ ビューのサイズに基づいて通常どおり外側から内側に配置されます。これは、前述のように明示的に設定しています。

そのような戦略を使用して、私はこれを達成しました (それぞれ 4 秒と 6 秒のシミュレーター)。スクリーン ショットからはわかりませんが、実際にスクロール ビューになっていることを確認してください。

ここに画像の説明を入力

ここに画像の説明を入力

あなたが本当に何を求めていたのかがはっきりしなかったので、あなたのスクリーンショットと完全に同じではありません。大きな画面で赤いビューの高さを大きくしたかったのかもしれません。しかし、それは小さな問題だと思います。

私が使用した唯一のコードは、コンテンツ ビューのサイズを設定することでした。これは、(私が言ったように) スクロール ビューの設定と同じですcontentSize

NSLayoutConstraint.activateConstraints([
    self.contentView.widthAnchor.constraintEqualToConstant(
        self.view.bounds.size.width),
    self.contentView.heightAnchor.constraintEqualToConstant(
        self.view.bounds.size.height),
])
于 2015-11-13T15:59:43.963 に答える
0

ボトムビューが常にその定数値でボトムからの距離を維持するように、ボトムレイアウトでボトムビューを一定の値で固定できると思います。

于 2015-11-13T17:47:00.383 に答える