5

デバイスがiPhone5(高い画面)であるか、以前のiPhoneバージョン(短い画面)であるかに応じて、UIImageViewのサイズを調整しようとしています。以下は私のコードです。ただし、アプリを実行すると、これらの手順は無視されます。この問題は自動レイアウトの制約が原因であると思われます。これらの制約をオフにすると、画像のサイズは変更されますが、レイアウトの残りの部分が台無しになります。自動レイアウトをオフにするのではなく、選択的にオーバーライドする方法はありますか?

CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height == 568) {

    // code for 4-inch screen
    avatarImage.frame = CGRectMake(43, 372, 75, 75);



} else {

    // code for 3.5-inch screen
    avatarImage.frame = CGRectMake(43, 372, 50, 50);

}

編集

以下は私が解決しようとしている問題の画像です。アバター画像は、小さい方のビューに収まるまで比例してサイズを変更したいと思います。そして、プログラムでテキストフィールドをラベルの右上に移動したいと思います。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

4

2 に答える 2

20

これを行う1つの方法は、プログラムで制約を変更することです。これは次の方法で実行できます。

  1. 画像ビューを選択し、Xcode 5でmボタンをクリックして、画像ビューの高さと幅の制​​約を作成します。

    ここに画像の説明を入力してください

    または、以前のバージョンのXcodeでは、中心ボタンをクリックして次のようにします。

    制約を作成する

  2. 他の二次的な制約作業を変更して、イメージビューのサイズを変更できるようにしてください。たとえば、このサムネイル画像の右側にラベルがある場合は、画像のサイズの変更に応じてラベルの幅が調整されるように設定されていることを確認する必要があります。結論として、アプリの実行時に制約の競合が発生しないようにする必要があります。競合が発生した場合、アプリを機能させるために制約を解除する必要があるというデバッグメッセージが表示される可能性があるためです。制約は満足のいくものではありません。

  3. IBOutlet新しい高さと幅の制​​約の参照を作成します。最も簡単な方法は、アシスタントエディターを表示して(ストーリーボードを操作しているときに関連する.hファイルが表示されるようにする)control、制約から.hファイルに-ドラッグすることです。

    IBOutletsを作成する

  4. 次に、コードで制約を変更できます。

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    
    if (screenBounds.size.height >= 568) {
        self.widthConstraint.constant = 75;
        self.heightConstraint.constant = 75;
    } else {
        self.widthConstraint.constant = 50;
        self.heightConstraint.constant = 50;
    }
    
于 2013-01-05T21:05:45.257 に答える
2

この場合、高さを指定する代わりに、上部のスペースをスーパービューに、下部のスペースをスーパービューに制限することをお勧めします。スーパービューの高さが変更されると、それに応じてサブビューの高さが増加します。

textViewを下ではなく上および右に移動すると、より困難になります。さまざまな制約の優先順位でその効果を達成できる可能性がありますが、おそらく腹を立てることになります。これは、実行時にプログラムで制約を更新する方がよいという重要な状況のように聞こえます。

@Robはまともなポイントを提供しました。それは、制約をIBOutletsにプラグインし、後でプログラムでそれらを変更または削除できることです。おそらく、そのアプローチはこの場合にも実を結ぶでしょう。

于 2013-01-05T21:11:01.870 に答える