Ответ 1
Надеюсь, теперь вы ответили на свой вопрос, но если не здесь, вы:
Просто добавьте ограничение высоты и ширины в свой UIImageView перед тем, как поместить его в представление стека. Сделайте их как 130, и вам должно быть хорошо.
My UIImageView загружается с изображением с высоким разрешением. Когда я добавляю UIImageView в UIStackView, представление стека будет увеличиваться до размера 1900x1200. В UIImageView contentMode установлен параметр "Аспект заполнения".
Что я могу сделать, чтобы изображение осталось с его текущим размером (130x130) после добавления его в представление стека?
Надеюсь, теперь вы ответили на свой вопрос, но если не здесь, вы:
Просто добавьте ограничение высоты и ширины в свой UIImageView перед тем, как поместить его в представление стека. Сделайте их как 130, и вам должно быть хорошо.
Мне удалось преодолеть это с помощью соотношения сторон настроек для изображения. Мой UIImageView
не добавляется непосредственно к UIStackView
, а завернутый в обычный UIView
. Таким образом я могу избежать вмешательства непосредственно с любыми ограничениями, создаваемыми UIStackView
для каждого добавленного subview.
Пример использования 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
Вы можете достичь этого с помощью Интерфейсного разработчика, отметив опцию для просмотра изображений, или вы можете добавить код как
imageView.clipToBounds = true