2011-08-31 11 views
6

एक नियंत्रक नेविगेशन बार में UISegmentedControl जोड़ता है। सेगमेंट नियंत्रण को viewDidLoad नियंत्रक की विधि में नेविगेशन बार में जोड़ा जाता है लेकिन वास्तविक खंड viewDidLoad के बाद गतिशील रूप से बनाए जाते हैं।गतिशील रूप से निर्मित एक सेगमेंट नियंत्रण के नेविगेशन बार में स्वचालित आकार बदलना

दृश्य दिखाए जाने पर मुझे सेगमेंट को स्वचालित रूप से आकार में नहीं बदला जा सकता है। वे सब squished हैं, like in this post, हालांकि संकल्प यहां लागू नहीं होता है। यदि खंडित नियंत्रण नेविगेशन बार के सही आइटम (कोड की गतिशील प्रकृति को तोड़ने) से पहले जोड़ा गया है, तो वे स्वचालित रूप से आकार बदलते हैं और दृश्य दिखाए जाने पर ठीक लगते हैं।

यहां मेरे कोड का एक संक्षिप्त संस्करण नीचे दिया गया है। मैं क्या खो रहा हूँ?

@implementation MyController  

- (void)viewDidLoad { 

    // segmentedControl is an ivar 
    segmentedControl = [UISegmentedControl alloc] initWithItems:[NSArray array]]; 
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl] autorelease]; 
    self.navigationController.navigationBar.topItem.rightBarButtonItem = barButtonItem; 

} 

- (void)someMethodCalledAfterViewDidLoad { 

    [segmentedControl insertSegmentWithTitle:@"a title" 
            atIndex:0 
            animated:NO]; 
} 

@end 

उत्तर

14

insertSegmentWithTitle कॉल

[segmentedControl sizeToFit];

+0

हाय @ क्रिस्टस्टज़ोफ, मैंने कोशिश की लेकिन यह दुख की बात नहीं थी। – ptrico

+1

हमारे लिए काम किया, धन्यवाद !!! –

1

कॉल करने के बाद मैं आज एक ही समस्या थी - UISegmentedControl खंडों शुरू में उचित चर चौड़ाई के साथ प्रदर्शित किया गया है, लेकिन विस्तार या अनुबंध नहीं किया था की लंबाई फिट करने के लिए नया, गतिशील रूप से अद्यतन शीर्षक।

सेगमेंट नियंत्रण को प्रत्येक अद्यतन के बाद समस्या को हल करने के बाद एक setNeedsLayout संदेश भेजना।

[segmentedControl setNeedsLayout]; 
+0

हाय @ फेडोनेव, इस पुराने प्रश्न का उत्तर देने के लिए धन्यवाद। मैं आपका जवाब स्वीकार करूंगा हालांकि मैंने इसे स्वयं परीक्षण नहीं किया है। मुझे लगता है कि मैंने प्रोग्रामिंग के प्रत्येक सेगमेंट पर चौड़ाई की गणना और सेटिंग समाप्त कर दी है। आपका समाधान सरल लगता है। – ptrico

+0

आकार टोफिट नौकरी करता है, और ऐसे मामलों में जहां सेगमेंट टाइटल बदल दिए गए हैं। – Jeff

संबंधित मुद्दे