2012-10-07 20 views
13

के फ्रेम को नहीं बदल सकता है, मैं वर्तमान में एक बहुत ही अजीब समस्या से फंस गया हूं। मैं आईओएस 6 और एक्सकोड 4.5 का उपयोग कर रहा हूं। मेरे पास UIViewController और UIButton के साथ एक स्टोरीबोर्ड है। मैंने अपनी .h फ़ाइल में कमजोर UIButton आउटलेट बनाया है।आईओएस UIButton

.m फ़ाइल में मैं बटन के फ्रेम को बदलना चाहता हूं लेकिन कुछ भी नहीं होता है। फिर भी मेरे पास UIImageView है और UIButton जैसा ही बनाया गया है लेकिन मैं बिना किसी समस्या के UIImageView के फ्रेम को बदल सकता हूं।

जब मैं यह कर:

NSLog(@"%@", button) 

मैं इस उत्पादन प्राप्त करें:

<UIButton: 0xa185a40; frame = (191 330; 73 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xa185640>> 

और ये मेरी कोड के प्रासंगिक भागों हैं:

-(void)viewDidLayoutSubviews{ 
    [self addStampGrid]; 
} 

-(void)addStampGrid { 

    // ... 

    [_button setFrame:CGRectMake(10,10,10,10)]; 
} 
+0

कुछ और संदर्भ कैसे दिखा रहे हैं? http://sscce.org –

+0

फ्रेम सेट करने का प्रयास करने से पहले, 'NSLog ("% @", बटन) आज़माएं;' और सुनिश्चित करें कि यह शून्य नहीं है। मुझे संदेह है कि आउटलेट सही ढंग से सेटअप नहीं है। एनएसएलओजी में – lnafziger

+0

हम्मम 'बटन' और सेटफ्रेम –

उत्तर

23

मैं एक ही अजीब था तैनाती लक्ष्य के रूप में एक्सकोड 4.5 और आईओएस 6 का उपयोग कर समस्या। हालांकि मैं कहानी बोर्ड का उपयोग नहीं कर रहा हूं। इंटरफ़ेस बिल्डर में "Autolayout का उपयोग करें" विकल्प को अक्षम करके मैं इसे हल करने में कामयाब रहा। (फ़ाइल inspector-> इंटरफ़ेस बिल्डर दस्तावेज़ आशा में।

इस मदद करता है।

+0

यह एक त्वरित हैक और बुरा विचार जैसा लगता है। @IBOutlets के साथ बाधाओं को बदलने और बटन.layer.frame को संशोधित करना बेहतर होगा। – boidkan

6

superview से देखने निकालें और फ्रेम एक subview के रूप फिर से इस दृश्य जोड़ने सेट करने के बाद उम्मीद है कि यह ठीक से काम करेंगे ...

+0

यह मेरे लिए काम करता है, बिना किसी आवश्यकता के कि मैं पूरी तरह से "Autolayout का उपयोग करें" बंद कर देता हूं। तो जब मैं उपयुक्त हो तो ऑटो लेआउट और मैन्युअल गणना का मिश्रण हो सकता है। +1! –

1

//

CGRect bounds = view.bounds; 
yourButton.center = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds)); 
UIButton

की

UIView *view = yourButton.superview; 
[yourButton removeFromSuperview]; 

// परिवर्तन फ्रेम superview से देखने निकालें

// एक subview

[view addSubview:yourButton]; 
11

आप इस प्रयोग करने से पहले अपने वर्ग शीर्षक में UIButton

[self.button.layer setFrame:] 

आयात QuartzCore ढांचे की परत के फ्रेम बदलकर अपने UIButton के फ्रेम को बदल सकते हैं के रूप में फिर से इस दृश्य में जोड़ें। यह ऑटो लेआउट के साथ भी काम करेगा।

+0

उप-वोटित, यह मेरे लिए काम किया। मुझे नहीं पता कि यह प्रश्न पहले क्यों मतदान किया गया है। – NSPratik

+0

यह सही उत्तर है, हाँ। –

7

आप अपने बटन के इस आप सेट कर सकते हैं फ्रेम के बाद इस

[_button setTranslatesAutoresizingMaskIntoConstraints:YES]; 

उपयोग कर सकते हैं।

यह बाधाओं के बारे में लॉग में कुछ चेतावनियां दे सकता है, क्योंकि यह संपत्ति ऑटोलायआउट में दी गई बाधाओं को ओवरराइड करती है।