2010-09-15 18 views
8

इंडेंट नहीं कर सकता है मैंने बटन और 2 लेबल के साथ कस्टम सेल बनाने के लिए UITableViewCell को उपclassed है। डेव मार्क के शुरुआती आईफोन विकास में उल्लिखित पैटर्न का उपयोग करके सेल परिभाषा को xib से लोड किया गया है। जैसा कि उम्मीद की लेकिन खरोज स्तर का सम्मान नहीं कर रहा हैUITableViewCell सबक्लास

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MarketItemCustomCell" owner:self options:nil]; 

    for (id oneObject in nib) 
    { 
     if ([oneObject isKindOfClass:[MarketItemCustomCell class]]) 
     { 
      cell = (MarketItemCustomCell *)oneObject; 
      break; 
     } 
    } 

लेबल और बटन प्रदर्शन: यहाँ आवश्यक कोड है। मैंने नीचे इंडेंटेशन लेवेलफोररोएट इंडेक्सपैथ लागू किया है, लेकिन सेल अभी भी बाईं ओर सभी तरह से गठबंधन है।

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     <snip/> 
     return 5; 
    } 

ध्यान दें कि जब मैं कस्टम सेल का उपयोग नहीं कर रहा हूं तो इंडेंटेशन स्तर ठीक काम करता है।

कोई संकेत?

उत्तर

21

अद्यतन UITableViewCell के मामले में प्रभावित नहीं करेगा iOS 8 के लिए वैकल्पिक सुझाव:

, एक autolayout बाधा बनाने इंडेंट बाईं मार्जिन

रनटाइम पर प्रतिनिधित्व करने के लिए विचार करें बदलने के लिए इस बाधा को संशोधित इंडेंट लेवल

यदि आपके पास कस्टम UITableViewCell सबक्लास है, तो इस सबक्लास में बाधा के लिए मैप किए गए आईबीओलेट हो सकते हैं। (दुर्भाग्यवश ऐप्पल ने एक खोज प्रदान नहीं किया था कोंटैगेट/आईडी फ़ंक्शन)

एनएसएलएआउट कॉन्स्ट्रेनेंट की विडंबनात्मक रूप से नामित "निरंतर" संपत्ति इंडेंट स्तर को बदलने के लिए संशोधित की जा सकती है।

iOS 7 के लिए, यह काम करता है (लेकिन अब नहीं की सिफारिश की जानी चाहिए)

vodkhang के सुझाव के आधार पर, मैं अपने UITableViewCell sublass में निम्नलिखित समाधान लागू। सुनिश्चित नहीं है कि यह सबसे अच्छा समाधान है लेकिन यह ठीक काम करता प्रतीत होता है।

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    float indentPoints = self.indentationLevel * self.indentationWidth; 

    self.contentView.frame = CGRectMake(indentPoints, 
              self.contentView.frame.origin.y, 
              self.contentView.frame.size.width - indentPoints, 
              self.contentView.frame.size.height); 
} 
+0

यह पूरी तरह से काम करता है! – Nathan

+1

सामग्री दृश्य को इंडेंट करने के लिए यह बहुत ही शानदार है - धन्यवाद! सेल को इंडेंट करने के बारे में कैसे? मैंने सोचा कि मैं सामग्री को हटा दूंगा उपरोक्त से देखें और देखें कि इंडेंटेशन लेवल 0 नहीं है, लेकिन यह icky दिखता है। कोड के ऊपर –

+3

आईओएस 8 – Gerry

1

मुझे लगता है कि आपको अपने कस्टम UITableViewCell में इंडेंटेशन स्तर को कस्टमाइज़ करने की आवश्यकता है। कोड नीचे नहीं रह गया है किसी कारण

लिए काम करता है: मैं इस विधि लगता है (और – tableView:heightForRowAtIndexPath: की तरह विधि) यदि अपने कस्टम UITableViewCell पहले से ही यह iOS 8 के लिए निर्दिष्ट

0

आप एक xib में एक UITableViewCell डिजाइन हैं, तो आप customView सेल संपत्ति है, जो खरोज स्वचालित रूप से उपयोग नहीं किया जाता का उपयोग किया जाएगा। आप UITableViewCell को उपclass कर सकते हैं और इंडेक्सेशन के आधार पर अपना फ्रेम बदलने के लिए लेआउट सबव्यूव्यू लागू कर सकते हैं या आप अपने टेबल प्रतिनिधि या डेटासोर्स में अपनी कोशिकाओं को कॉन्फ़िगर करने से कहीं भी ऐसा कर सकते हैं। मेरी इच्छा है कि ऐप्पल ने कस्टम कोशिकाओं के लिए इंडेंटेशन लागू किया हो।