私のUIImageViewには、高解像度の画像が読み込まれています。 UIImageViewをUIStackViewに追加すると、スタックビューは1900x1200のサイズまで大きくなります。 UIImageViewcontentModeはAspectFillに設定されています。
スタックビューに画像を追加した後、画像を現在のサイズ(130x130)のままにするにはどうすればよいですか?
私はあなたが今までにあなたの質問に答えてくれたことを願っています、しかしここになければあなたは行きます:
スタックビューに配置する前に、UIImageViewに高さと幅の制約を追加するだけです。それらを両方とも130にして、あなたは行ってもいいはずです。
画像ビューのアスペクト比を設定することで、これを克服することができました。私のUIImageView
はUIStackView
に直接追加されず、代わりにプレーンなUIView
でラップされます。このようにして、追加されたサブビューごとにUIStackView
が作成する制約に直接干渉することを回避できます。
PureLayoutの使用例:
#import <math.h>
#import <float.h>
@interface StackImageView : UIView
@property (nonatomic) UIImageView *imageView;
@property (nonatomic) NSLayoutConstraint *aspectFitConstraint;
@end
@implementation StackImageView
// skip initialization for sanity
// - (instancetype)initWithFrame:...
- (void)setup {
self.imageView = [[UIImageView alloc] initForAutoLayout];
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
[self addSubview:self.imageView];
// pin image view to superview edges
[self.imageView autoPinEdgesToSuperviewEdges];
}
- (void)setImage:(UIImage *)image {
CGSize size = image.size;
CGFloat aspectRatio = 0;
// update image
self.imageView.image = image;
if(fabs(size.height) >= FLT_EPSILON) {
aspectRatio = size.width / size.height;
}
// Remove previously set constraint
if(self.aspectFitConstraint) {
[self.imageView removeConstraint:self.aspectFitConstraint];
self.aspectFitConstraint = nil;
}
// Using PureLayout library
// you may achieve the same using NSLayoutConstraint
// by setting width-to-height constraint with
// calculated aspect ratio as multiplier value
self.aspectFitConstraint =
[self.imageView autoMatchDimension:ALDimensionWidth
toDimension:ALDimensionHeight
ofView:self.imageView
withMultiplier:aspectRatio
relation:NSLayoutRelationEqual];
}
@end
セットする
clipToBounds = true
これは、Image viewのオプションをチェックすることで、Interface Builderで実現できます。または、次のようにコードを追加することもできます。
imageView.clipToBounds = true