2015-08-15 17 views
7

UIImageView'ım yüksek çözünürlüklü bir fotoğrafa sahiptir. UIImageView'ı UIStackView'e eklediğimde, yığın görünümü 1900x1200 boyutuna kadar büyüyecek. UIImageView contentMode, Aspect Fill olarak ayarlandı.Bir UIImageView öğesinin UIStackView içine düzgün bir şekilde nasıl eklenmesi

Yığın görünümüne ekledikten sonra resmin geçerli boyutuyla (130x130) kalmasını sağlamak için ne yapabilirim?

+0

kısıtlamaları ekleyin. Sorunuz çok geniştir ... – Wain

+2

[öz addConstraint: [NSLayoutConstraint constraintWithItem: myUIImageVIew nitelik: NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem: nil özniteliği: NSLayoutAttributeNotAnAttribute çarpanı: 1.f sabiti: 130]]; [self addConstraint: [NSLayoutConstraint kısıtlamasıWithItem: myUIImageVIew özniteliği: NSLayoutAttributeHeight relatedBy: NSLayoutRelationEqual toItem: nil özniteliği: NSLayoutAttributeNotAnAttribute çarpanı: 1.f sabiti: 130]]; – Loxx

cevap

13

ben size soru artık cevap var umuyoruz, ancak gitmeyecek burada eğer:

Basitçe yığın görünümünde koyarak önce UIImageView bir yükseklik ve genişlik kısıtlaması ekleyin. İkisini de 130 yap ve gitmek için iyi olmalısın.

+0

Merhaba, yığın görünümü içine yerleştirmeden önce neden UIIMageView'a kısıtlamalar eklememiz gerektiğini merak ediyordum. StackView bizim için kısıtlamalara dikkat etmiyor mu? –

+1

Konumlandırma kısıtlamalarına yardımcı olur ve işini çok iyi yapar. Ancak her şey yığın görünümünde aynı yükseklikte ve genişlikte olsaydı çok kısıtlayıcı bir yapı olurdu. Yüksekliği ve genişliğini sizin için otomatik olarak ayarlayabilir, ancak daha ince bir kontrol istiyorsanız, yükseklik ve genişlik kısıtlamaları gidilebilir. –

+0

Çok basit, harika. Ben StackView içinde UIImageView ile mücadele ediyordum ve aslında yığın görünümünde yerleştirmeden önce üzerinde kısıtlamalar hakkında düşünmedim. Teşekkürler! – Bastek

2

Bunu, görüntü görüntüsü için ayar en boy oranıyla başarabildim. Benim UIImageView doğrudan UIStackView, doğrudan değil UIView düz olarak sarılmış değil. Bu şekilde, eklenen her alt görüş için UIStackView'un oluşturduğu kısıtlamalarla doğrudan karışmayı engelleyebilirim. PureLayout kullanarak

Örnek:

#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 
İlgili konular