12

我的 UIImageView 加载了一张高分辨率的图片。当我将 UIImageView 添加到 UIStackView 时,堆栈视图将增长到 1900x1200 尺寸。UIImageView contentMode 设置为 Aspect Fill。

在将图像添加到堆栈视图后,我该怎么做才能使图像保持其当前尺寸(130x130)?

4

3 回答 3

22

我希望你现在已经回答了你的问题,但如果没有,你可以去:

只需将高度和宽度约束添加到 UIImageView,然后再将其放入堆栈视图。把它们都设为 130,你应该很高兴。

于 2015-09-28T04:41:32.380 回答
3

我能够通过设置图像视图的纵横比来克服这个问题。myUIImageView不是直接加进去的UIStackView,而是用plain 包裹的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
于 2015-11-10T18:01:19.877 回答
-2

clipToBounds = true

您可以通过界面生成器通过检查图像视图的选项来实现这一点,或者您可以添加代码为

imageView.clipToBounds = true
于 2019-04-12T07:36:02.603 回答