web-dev-qa-db-ja.com

自動レイアウトはUIImageViewを引き伸ばし続けます

私は自動レイアウトを使用していますが、それは私を夢中にさせています。 UIImageViewが全体に広がるのを防ぐために、できる限りのことを行いました。なぜそうなるのか分かりません。自動レイアウトの問題を解決して、制約を使用してみました。今のところ、唯一の解決策は自動レイアウト自体を変えることでした。

Xcodeが私の制約を完全に無視している理由を教えてください。 UIImageは、明示的に設定すると320x320のままになると予想されますが、noooooooo ....

画像を投稿したいのですが、サイトでは許可されません。この質問にコードを追加して、より具体的にしますが、文字通りコードはまったくありません。 「UIImageView」をストーリーボードからドラッグして小さくし、制約をそのまま設定しましたが、コードは無視されます。

31
Gyuhyeon Lee

UIImageViewが境界にクリップするように設定されていることを確認する必要があります。そうでない場合、画像はビューからはみ出し、正しく伸びていないように見えます(実際には伸びていますが)。

インターフェイスビルダーで、[クリップサブビュー]ボックスがオンになっていることを確認します。

enter image description here

インターフェイスビルダーを使用していない場合、次のコードは同じことを行います。

yourImageView.clipsToBounds = YES;
48
Travis

自動レイアウトでは、サイズインスペクターの値はほとんど無視されます。

Anything you enter here will be ignored

サイズインスペクターのボックスに数値を入力すると、Xcodeは入力した内容を反映する制約を自動的に作成しますが、入力は反映しません。 UIImageViewの高さと幅に対して、独自に「ピン」制約を作成する必要があります。

  • ストーリーボードの画像ビューを選択します
  • ストーリーボード画面の右下にある[ピン]ボタンをクリックします
  • 「幅」および「高さ」フィールドに希望のサイズを入力し、ボックスがチェックされていることを確認します
  • [2つの制約を追加]ボタンをクリックします

    enter image description here

完了すると、画面の右側にあるサイズインスペクター(紫色のボックス)に制約が表示されます。

enter image description here

7
GeneralMike

私の問題はContentHuggingPriorityContentCompressionResistancePriorityにありました。

前者は、ビューを画像に「ハグ」させたままにすることの重要性を制御し(拡大せずに近づき)、後者は、ビューの圧縮に対する耐性を制御します。

PureLayout を使用しているため、修正するコードは次のとおりです。

[NSLayoutConstraint autoSetPriority:ALLayoutPriorityRequired forConstraints:^{
    [myImageView autoSetContentCompressionResistancePriorityForAxis:ALAxisHorizontal];
    [myImageView autoSetContentHuggingPriorityForAxis:ALAxisHorizontal];
}];

(私の問題は水平軸のみにありました)

2016年5月15日:PureLayout v3構文に更新されました。バージョン<= 2を使用する場合は、UIViewの代わりにNSLayoutConstraintを入力します。ありがとう Rudolf J

5
Noam Nelke

同じ問題がありました。 UIImageViewをプロトタイプセルに追加し、テキストの隣に配置したいのですが、制約を適用したときに画像を引き伸ばし続けました。私の場合、画像ビューの「Mode」プロパティを「Aspect Fit」に変更しましたが、うまく機能しました。 enter image description here

3
JanB

UIImageViewをプログラムで追加してみることができます。 viewDidLoadメソッドまたは任意の場所でこのコードを呼び出します。

UIImageView *yourImageView = [[UIImageView alloc]initWithFrame:CGRectMake(50.0f, 50.0f, 320.0f, 320.0f)]; // x and y coordinates, width and height of UIImageView
[yourImageView setImage:[UIImage imageNamed:@"your_image.png"]];
[yourImageView setContentMode:UIViewContentModeCenter]; // you can try use another UIViewContentMode

[self.view addSubview:yourImageView];
0
Ilya Dmitriev