2013-01-15 23 views
6

का आकार बदल नहीं सकता है यह एक साधारण बात है, मुझे समझ में नहीं आता कि यह गलत क्यों हो रहा है। मैं touchUpInside दूसरे के हैंडलर से UIButton के आकार को बदलने की कोशिश कर रहा हूं। रिप्रो करने के लिए, मैंने एक्सकोड में एक नया (आईओएस 6) प्रोजेक्ट बनाया है, और डिफ़ॉल्ट रूप से बनाई गई xib फ़ाइल में दो बटन खींच लिया है। touchUpInsidebutton1 के लिए हैंडलर नीचे दिखाया गया है। अगर मैं सिर्फ उस वक्तव्य को शामिल करता हूं जो के origin.x सेट करता है, तो मुझे button2 अपेक्षित स्थान पर दिखाई देता है। हालांकि, बटन का size.width सेट करने वाला कथन काम नहीं करता है। असल में, अगर मैं उस कथन को शामिल करता हूं तो मूल या तो नहीं बदलता है।UIButton

मैं xib डिजाइनर में बटन ठीक है और केवल संपत्ति मैं निर्धारित किया है (से

- (IBAction)buttonPressed:(id)sender { 
    CGRect f = self.button2.frame; 
    f.origin.x += 10; 
    // this doesn't work, including it prevents even the origin change from working 
    f.size.width += 10; 
    self.button2.frame = f; 
} 

अन्य आकार बदल सकते हैं मैं कैसे सफलतापूर्वक बटन के आकार को बदल सकते हैं?

धन्यवाद!

+1

मैं इसे की कोशिश की है और अपने कोड वास्तव में काम कर रहा है। क्या आप सुनिश्चित हैं कि इस फ्रेम परिवर्तन में छवि/पृष्ठभूमि छवि के साथ कुछ भी नहीं है? और भी, बटन प्रकार क्या है? –

+0

self.button2 उस विधि में शून्य हो सकता है। जांचें .. आप प्रेषक से दबाए गए बटन संदर्भ ले सकते हैं .. –

+0

यूनूस, मैंने एक नई परियोजना बनाई और इसे रेफ्रो करने के लिए डिफ़ॉल्ट xib में एक राउंड रेक्ट जोड़ा। कोई छवि नहीं है (पृष्ठभूमि या अग्रभूमि)। अनुशा: यह शून्य नहीं है, और यह अन्य बटन के साथ भी काम नहीं करता है। – mcobrien

उत्तर

7

यकीन के लिए आप autolayout उपयोग कर रहे हैं, बस क्या happ यहां आईओएस ऑटोलाउट तंत्र स्वचालित रूप से आपके लेआउट को सेट करने का प्रयास करता है। ऑटोलाउट बंद करके अपना कोड आज़माएं। आशा है कि आप जानते हैं कि एक्सकोड में ऑटो लेआउट को कैसे बंद करना है, अगर मुझे नहीं पता है।

हैप्पी कोडिंग !!!

संपादित करें:

autolayout iOS 6 के साथ आता है, thats क्यों अपने कोड पुराने संस्करण (आईओएस 5) के साथ काम किया। बीटीडब्ल्यू ने निक के रूप में कहा कि आप एक्सकोड में फ़ाइल इंस्पेक्टर में ऑटोलाउट बंद कर सकते हैं।

संलग्न स्क्रीनशॉट देखें।

enter image description here

+0

मुझे आश्चर्य हुआ कि ऑटोलाउट इसका कारण हो सकता है या नहीं। यह मेरी आईओएस 5 परियोजनाओं के साथ कभी नहीं हुआ। मैं इसे कैसे अक्षम कर सकता हूं, या (बेहतर), ऑटोलाउट के साथ काम करने के लिए यह सही तरीका क्या है? – mcobrien

+1

आप इंटरफेस बिल्डर – Nick

+1

के फाइल इंस्पेक्टर में ऑटोलायआउट बंद कर सकते हैं, यह था, बहुत बहुत धन्यवाद! मैंने यह भी पता लगाया कि अगर मैं ऑटोलाउट का उपयोग करना जारी रखना चाहता हूं (यह अच्छा लगता है, और मैं इसे और अधिक सीखने के बिना अस्वीकार नहीं करना चाहता हूं :), मैं बटन की चौड़ाई पिन कर सकता हूं (इसे चुनकर, फिर थोड़ा क्लिक कर सकता हूं " एच "आईबी डिजाइनर के निचले दाएं भाग पर बटन), मैंने जो बाधा डाली है, उसके लिए एक आउटलेट जोड़ें और रनटाइम पर चौड़ाई को बदलने के लिए अपनी निरंतर संपत्ति को समायोजित करें। यह बहुत मजबूत है (शायद एक आसान तरीका है?) लेकिन मुझे खुशी है कि यह समझ में आता है। – mcobrien

3

प्रयास करें:

CGRect buttonFrame = button.frame; 
buttonFrame.size = CGSizeMake(150, 70); 
button.frame = buttonFrame; 
+2

ऑटो-लेआउट सक्षम होने पर काम नहीं करेगा – Groot

0

सीमा के साथ काम करें:

[self.button setBounds:CGRectMake(0, 0, 400, 400)];

निर्माण किया जाए या नहीं ऑटो लेआउट पर है! हमेशा की तरह, सुनिश्चित करें कि आपका आउटलेट ठीक तरह से स्थापित है ताकि आप बटन से बात कर सकें।

आप ऑटो लेआउट में भी ऐसा कर सकते हैं। चौड़ाई और ऊंचाई की बाधाओं को हटाएं और नए में जोड़ें, लेकिन यदि आपके बटन पर शायद चौड़ाई या ऊंचाई की बाधा नहीं है (संभवतः बुद्धिमान) तो बस सीमाएं सेट करें और जब तक आपको अपना बटन दोबारा सेट करने की आवश्यकता न हो, इसे बस काम करना चाहिए जब आप बटन सीमा बदलते हैं तो स्वतः लेआउट बाधाओं को स्वचालित रूप से अपडेट कर देगा।

बीटीडब्लू, आपको कभी भी बटन फ्रेम को छूना नहीं चाहिए जबतक कि आप ऑब्जेक्ट को मैन्युअल तरीके से स्थिति में रखने के लिए इसका उपयोग नहीं कर रहे हैं। बाउंड आकार के लिए हैं, फ्रेम स्थिति के लिए है।

0

ऑटो-लेआउट को अक्षम करना आपके इच्छित समाधान नहीं हो सकता है।

एक संभावना यह है कि आप बटन को जिम्मेदार शीर्षक सेट करते हैं और अब शीर्षक शीर्षक आकार को बदलकर काम नहीं करेंगे।आपको फिर से एट्रिब्यूटेड टिटल सेट करने की आवश्यकता है

0

यदि आप UIButton टेक्स्ट लम्बाई बदलने की कोशिश कर रहे हैं, तो आप डिफ़ॉल्ट लंबाई से प्रतिबंधित रहेंगे और जब यह बहुत लंबा होगा तो लाइन ब्रेक लागू किया जाएगा (यानी ट्रंकेट टेल या तीन डॉट्स)। द्वारा डिफ़ॉल्ट आकार बदलें:

yourButton.setTitle("yourString", for: UIControlState.normal)

यह ज्यादातर मामलों के लिए काम करेंगे, लेकिन सभी UIControlState रों