私は自動レイアウトを使用していますが、それは私を夢中にさせています。 UIImageViewが全体に広がるのを防ぐために、できる限りのことを行いました。なぜそうなるのか分かりません。自動レイアウトの問題を解決して、制約を使用してみました。今のところ、唯一の解決策は自動レイアウト自体を変えることでした。
Xcodeが私の制約を完全に無視している理由を教えてください。 UIImageは、明示的に設定すると320x320のままになると予想されますが、noooooooo ....
画像を投稿したいのですが、サイトでは許可されません。この質問にコードを追加して、より具体的にしますが、文字通りコードはまったくありません。 「UIImageView」をストーリーボードからドラッグして小さくし、制約をそのまま設定しましたが、コードは無視されます。
UIImageView
が境界にクリップするように設定されていることを確認する必要があります。そうでない場合、画像はビューからはみ出し、正しく伸びていないように見えます(実際には伸びていますが)。
インターフェイスビルダーで、[クリップサブビュー]ボックスがオンになっていることを確認します。
インターフェイスビルダーを使用していない場合、次のコードは同じことを行います。
yourImageView.clipsToBounds = YES;
自動レイアウトでは、サイズインスペクターの値はほとんど無視されます。
サイズインスペクターのボックスに数値を入力すると、Xcodeは入力した内容を反映する制約を自動的に作成しますが、入力は反映しません。 UIImageView
の高さと幅に対して、独自に「ピン」制約を作成する必要があります。
[2つの制約を追加]ボタンをクリックします
完了すると、画面の右側にあるサイズインスペクター(紫色のボックス)に制約が表示されます。
私の問題はContentHuggingPriority
とContentCompressionResistancePriority
にありました。
前者は、ビューを画像に「ハグ」させたままにすることの重要性を制御し(拡大せずに近づき)、後者は、ビューの圧縮に対する耐性を制御します。
PureLayout を使用しているため、修正するコードは次のとおりです。
[NSLayoutConstraint autoSetPriority:ALLayoutPriorityRequired forConstraints:^{
[myImageView autoSetContentCompressionResistancePriorityForAxis:ALAxisHorizontal];
[myImageView autoSetContentHuggingPriorityForAxis:ALAxisHorizontal];
}];
(私の問題は水平軸のみにありました)
2016年5月15日:PureLayout v3構文に更新されました。バージョン<= 2を使用する場合は、UIView
の代わりにNSLayoutConstraint
を入力します。ありがとう Rudolf J !
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];