2015-01-15 6 views
16

UIImageView एक छवि के आकार को गलत तरीके से प्रस्तुत करता है। स्केल आस्पेक्ट फ़िट का उपयोग करना, यदि UIImageView एक वर्ग है, तो छवि उन क्षेत्रों में पारदर्शिता के साथ सही पहलू अनुपात है जो छवि भरती नहीं है।स्विफ्ट UIImageView खिंचाव पहलू

//Image is Square & Correct Size 
var imageView = UIImageView(frame: CGRectMake(0, 50, 320, 320)) 
imageView.clipsToBounds = true 
imageView.contentMode = UIViewContentMode.ScaleAspectFit 

//Image is Rectangle & Incorrect Size 
var imageView = UIImageView(frame: CGRectMake(0, 50, 320, 450)) 
imageView.clipsToBounds = true 
imageView.contentMode = UIViewContentMode.ScaleAspectFit 

UIImageView किनारों को छूने और शीर्ष पर पारदर्शी अंतरिक्ष और स्क्रीन के नीचे और छवि के अंदर लम्बे खींच के बजाय अपने मूल अनुपात रखने की जरूरत की जरूरत है। मैंने UIImageView के अंदर की छवि को प्रतिपादित करने के तरीके की दो छवियां संलग्न की हैं।

ImageView with correct Aspect ImageView with wrong Aspect

उत्तर

30

मैंने UIImageView में एक ऑटोरेसाइजिंग मास्क जोड़ा और अब यह सही अनुपात प्रदर्शित करता है।

imageView.autoresizingMask = UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleRightMargin | UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleWidth 
imageView.contentMode = UIViewContentMode.ScaleAspectFit 

इस उत्तर मुझे मदद मिली: Captured photo is stretched with AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto के रूप में मैं एक छवि है कि फोन के कैमरे के माध्यम से ले जाया गया था का उपयोग कर रहा था।

+4

स्विफ्ट 3 कोड: imageView.autoresizingMask = [.flexibleTopMargin, .flexibleHeight, .flexibleRightMargin,।लचीला LeftMargin, .flexibleTopMargin, .flexibleWidth] – Markymark

+1

@george ग्रोवर यह उत्तर पुराना है, कृपया इसे अद्यतन करें। –

5

UIViewContentMode.ScaleAspectFit के लिए इच्छित व्यवहार है कि। डॉक्स से:

UIViewContentModeScaleAspectFit

विकल्प सामग्री पैमाने पर करने के पहलू अनुपात बनाए रखने के द्वारा दृश्य के आकार फिट करने के लिए। किसी भी शेष दृश्य की सीमाओं का क्षेत्र पारदर्शी है।

यह तुम क्या वर्णन है कि आप करने के लिए सामग्री पैमाने पर करने के दृश्य के आकार को भरने UIViewContentMode.ScaleAspectFill

UIViewContentModeScaleAspectFill

विकल्प की जरूरत से लगता है। दृश्य की सीमाओं को भरने के लिए सामग्री के कुछ हिस्से को पर क्लिप किया जा सकता है।

+0

मैं छवि चाहते हैं जैसे कि बॉक्स फिट करने के लिए जब बॉक्स लंबा हो जाता है तो पक्ष किनारों को छूते हैं और ऊपर और नीचे एक पारदर्शी स्थान बना रहता है। ScaleAspectFill इस नतीजे को नहीं देता है, आप पक्षों को छूने के लिए मजबूर करने के लिए कैसे सुझाव देंगे, लेकिन ऊपर और नीचे नहीं? –

+0

ठीक है, मैंने सोचा था कि आप कह रहे थे कि आप पारदर्शिता की बात नहीं चाहते थे। क्षमा करें मैंने आपको गलत समझा। – Cezar

+0

क्षमा करें, मैंने खुद को सही तरीके से समझाया नहीं - इसे साफ़ करने के लिए मेरे प्रश्न को अपडेट किया गया। क्या आपके पास कोई विचार है कि छवि क्षैतिज रूप से लंबवत क्यों बढ़ रही है? –

9

मुझे एक ही समस्या थी, और यह मेरे लिए तय किया गया था कि सामग्री मोड सेट करने के बाद छवि दृश्य छवि सेट करना सुनिश्चित कर रहा था। अर्थात्:

self.imageView.contentMode = UIViewContentMode.ScaleAspectFit 
    self.imageView.image = imageChosen 

चीयर्स

13

अपने कोड की स्विफ्ट 3 संस्करण:

imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin] 
imageView.contentMode = .scaleAspectFit // OR .scaleAspectFill 
imageView.clipsToBounds = true