2015-08-15 11 views
7

के अंदर UIImageView को सही तरीके से कैसे जोड़ा जाए, मेरा UIImageView एक उच्च रिज़ॉल्यूशन वाले चित्र के साथ लोड किया गया है। जब मैं UISmackView को UISmackView में जोड़ता हूं, तो स्टैक व्यू 1 9 00x1200 आयाम तक बढ़ेगा। UIImageView सामग्री मोड पहलू भरने के लिए सेट है।UIStackView

मैं क्या कर सकता हूं ताकि छवि अपने वर्तमान आयाम (130x130) के साथ स्टैक व्यू में जोड़ने के बाद बनी रहे?

+0

बाधाओं जोड़ें। आपका प्रश्न बहुत व्यापक है ... – Wain

+2

[आत्म addConstraint: [NSLayoutConstraint constraintWithItem: myUIImageVIew विशेषता: NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem: शून्य विशेषता: NSLayoutAttributeNotAnAttribute गुणक: 1.f निरंतर: 130]]; [self addConstraint: [NSLayoutConstraint constraintWithItem: myUIImageVIew विशेषता: NSLayoutAttributeHeight संबंधित: NSLayoutRelationEqual toItem: nil विशेषता: NSLayoutAttributeNotAnAttribute गुणक: 1.f निरंतर: 130]]; – Loxx

उत्तर

13

मैं आप अपने प्रश्न अब तक का उत्तर मिला उम्मीद है, लेकिन अगर यहाँ नहीं तुम जाओ:

बस अपने ढेर दृश्य में डालने से पहले अपने UIImageView करने के लिए एक ऊंचाई और चौड़ाई बाधा जोड़ें। उन्हें 130 दोनों बनाओ और आपको जाने के लिए अच्छा होना चाहिए।

+0

हाय मैं सोच रहा था कि स्टैक व्यू के अंदर रखने से पहले हमें UIIMageView में बाधाएं क्यों जोड़नी पड़ीं। क्या स्टैक व्यू हमारे लिए बाधाओं का ख्याल रखता है? –

+1

यह स्थिति की बाधाओं में मदद करता है, और इसकी नौकरी बहुत अच्छी तरह से करता है। लेकिन स्टैक व्यू के अंदर सब कुछ एक ही ऊंचाई और चौड़ाई होना चाहिए, तो यह एक बहुत ही सीमित निर्माण होगा। यह आपके लिए स्वचालित रूप से ऊंचाई और चौड़ाई निर्धारित कर सकता है, लेकिन यदि आप बेहतर नियंत्रण चाहते हैं, तो ऊंचाई और चौड़ाई की बाधाएं जाने का तरीका हैं। –

+0

इतना आसान, कमाल। मैं स्टैक व्यू के अंदर UIImageView के साथ संघर्ष कर रहा था और वास्तव में इसे स्टैक व्यू में डालने से पहले इस पर बाधाओं के बारे में नहीं सोचा था। धन्यवाद! – Bastek

2

मैं छवि दृश्य के लिए सेटिंग पहलू अनुपात से इसे दूर करने में सक्षम था। मेरा 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 
संबंधित मुद्दे