2012-05-14 12 views
89

मैं UIButton के छवि आकार को कैसे समायोजित कर सकता हूं? मैं इस तरह की छवि स्थापित करने हूँ:UIButton की छवि आकार को कैसे समायोजित करें?

[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal]; 

हालांकि इस पूर्ण बटन करने के लिए छवि भरता, मैं कैसे छवि छोटे कर सकता हूँ?

+5

क्या आपने छवि को छोटा (एलओएल) बनाने की कोशिश की है? – CodaFi

+1

@ कोडाफ़ी सही है, आपको आम तौर पर सही आकार पर संपत्तियां प्रदान करनी चाहिए क्योंकि यह सीपीयू के लिए कोई भी काम कम कर देती है, कम मेमोरी का उपयोग करती है और संभवतः आप बेहतर दिखेंगे क्योंकि आप किसी भी स्केलिंग कलाकृतियों को संभावित रूप से पेश नहीं करते हैं ... –

+0

इसके अलावा आप भी कर सकते हैं छवि के आकार (या इसके विपरीत) के लिए बटन। इसमें एक छोटी सी बटन क्यों है ... इसमें एक छोटी छवि के साथ। बस अपनी इच्छित छवि जोड़ें, यही कस्टम बटन हैं या आप तर्क को समझा सकते हैं दूसरों के लिए एक स्पष्ट विचार करने के लिए लागू करना चाहते हैं। –

उत्तर

150

यदि मैं सही ढंग से समझता हूं कि आप क्या करने का प्रयास कर रहे हैं, तो आपको बटन छवि एज इन्सेट के साथ खेलना होगा। की तरह कुछ:

[myLikesButton setBackgroundImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal]; 

आप मस्तूल छवि और बटन के एक ही आकार के होते हैं:

myLikesButton.imageEdgeInsets = UIEdgeInsetsMake(top, left, bottom, right); 
-6

मुझे लगता है कि, अपनी छवि का आकार भी एक ही बटन आकार के रूप में तो आप की तरह बटन की पृष्ठभूमि में छवि डाल है। मुझे आशा है कि आप मेरी बात समझ लेंगे।

16

आप imageEdgeInsets संपत्ति का उपयोग कर सकते हैं बटन की छवि के चारों ओर आयताकार के लिए इंसेट या आउटसेट मार्जिन।

[self.btn setImageEdgeInsets:UIEdgeInsetsMake(6, 6, 6, 6)]; 

एक सकारात्मक मूल्य घटता है, या इन्सेट, वह बढ़त-चलती है। एक नकारात्मक मूल्य फैलता है, या किनारे, उस किनारे।

63

टिम का जवाब सही है, हालांकि मैं एक और सुझाव जोड़ना चाहता था, क्योंकि मेरे मामले में पूरी तरह से एक सरल समाधान था।

मैं UIButton छवि सन्निवेश स्थापित करने के लिए क्योंकि मुझे नहीं पता था मैं बटन के UIImageView पर सामग्री मोड है, जो पूरी तरह UIEdgeInsets और हार्ड-कोडेड मूल्यों का उपयोग करने की आवश्यकता पर रोका है | सेट कर सकते हैं कि देख रहा था। सीधे शब्दों में बटन पर अंतर्निहित imageView सामग्री तक पहुंचने और मोड सेट:

myButton.imageView.contentMode = UIViewContentModeScaleAspectFit; 

देखें UIButton doesn't listen to content mode setting?

स्विफ्ट 3

myButton.imageView?.contentMode = .scaleAspectFit 
+1

पृष्ठभूमि छवि के लिए कैसे करना है? –

+0

myButton.backgroundImageView? .contentMode = .scaleAspectFit –

+0

@ Andrea.Ferrando 'button.backgroundImageView.contentMode' काम नहीं करता –

11

यहाँ स्विफ्ट संस्करण:

myButton.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) 
5

की मदद से 903,210, मैं स्विफ्ट का उपयोग कर UIButton पर एक विस्तार है कि आप एक अतिरिक्त frame पैरामीटर

extension UIButton{ 

    func setImage(image: UIImage?, inFrame frame: CGRect?, forState state: UIControlState){ 
     self.setImage(image, forState: state) 

     if let frame = frame{ 
      self.imageEdgeInsets = UIEdgeInsets(
       top: frame.minY - self.frame.minY, 
       left: frame.minX - self.frame.minX, 
       bottom: self.frame.maxY - frame.maxY, 
       right: self.frame.maxX - frame.maxX 
      ) 
     } 
    } 

} 

इस का उपयोग के साथ .setImage() फ़ंक्शन का उपयोग करके छवि फ्रेम निर्दिष्ट कर सकते हैं बनाने के लिए कर रहा था, यदि आप एक के फ्रेम सेट करना चाहता था CGRectMake(0, 0, 64, 64) को UIButton, और CGRectMake(8, 8, 48, 48) के एक फ्रेम के साथ myImage करने के लिए इसे की छवि निर्धारित करते हैं, आप

let button: UIButton = UIButton(frame: CGRectMake(0, 0, 64, 64)) 
button.setImage(
    myImage, 
    inFrame: CGRectMake(8, 8, 48, 48), 
    forState: UIControlState.Normal 
) 
+2

आपको 'फ्रेम'' शून्य' की जांच करने के बजाय 'अगर चलो' चाहिए और फिर [बल को अनचाहे करना zillion बार] (https://i.imgflip.com/utfq7.jpg)। – fpg1503

10

इस्तेमाल कर सकते हैं आप भी कर सकते हैं कि इस तरह inteface बिल्डर से।

enter image description here

मुझे लगता है कि यह उपयोगी है।

7

यदि आपकी छवि बहुत बड़ी है (और आप छवि को छोटा नहीं बनाना चाहते हैं), पहले दो उत्तरों का संयोजन बहुत अच्छा काम करता है।

 addButton.imageView?.contentMode = .scaleAspectFit 
     addButton.imageEdgeInsets = UIEdgeInsetsMake(15.0, 15.0, 15.0, 5.0) 

जब तक आप छवि सन्निवेश वाली सिर्फ सही पाने के लिए, छवि contentMode बदले बिना विषम कर दिया जाएगा।

5

स्विफ्ट 3:

button.setImage(UIImage(named: "checkmark_white"), for: .normal) 
button.contentVerticalAlignment = .fill 
button.contentHorizontalAlignment = .fill 
button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10) 
1

स्विफ्ट 3 के लिए

yourButtonName.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10) 
1

स्विफ्ट 3

मैं 40 myButton चौड़ाई और ऊंचाई सेट और EdgeInsetsMake से मेरी गद्दी 15 सभी पक्षों है अपडेट किया गया । मैं वास्तविक पैडिंग देखने के लिए अपने बटन में पृष्ठभूमि रंग जोड़ने का सुझाव देता हूं।

myButton.backgroundColor = UIColor.gray // sample color to check padding 
myButton.imageView?.contentMode = .scaleAspectFit 
myButton.imageEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15) 
संबंधित मुद्दे