2010-04-24 22 views
7

के रेड्रा को मजबूर करने की कोशिश कर रहा है, मुझे यह पोस्ट http://news.selectstartstudios.com/beveled-uitableviewcells/ से बेवलड UITableViewCells पर मिला। मैं कोशिकाओं की चौड़ाई को कम करने के लिए तकनीक का उपयोग कर रहा हूं, और अधिकांश भाग के लिए यह बहुत अच्छा काम करता है।UITableViewCell

हालांकि, मुझे एक छोटी सी समस्या है। कभी-कभी कोशिकाओं को ठीक से नहीं खींचा जाता है। उदाहरण के लिए, भले ही एक सेल "मध्यम" सेल माना जाता है, फिर भी इसे "शीर्ष" सेल के रूप में खींचा जाता है: yfrog.com/f1screenshot20100424at100

मैं इसे कैसे ठीक कर सकता हूं?

मैं [सेल setNeedsDisplay], [सेल setNeedsLayout], के माध्यम से पुनः बनाने का सेल के लिए मजबूर कर की कोशिश की है [tableView reloadRowAtIndexPath: withAnimation:], [सेल drawRect:], और [tableView drawRect: atIndexPath]। मुझे कोई विचार नहीं सूझ रहा।

फिर से धन्यवाद!

उत्तर

23

बाहर निकलता है मुझे सेलफोररोएट इंडेक्सपेथ के अंत में [cell.backgroundView setNeedsDisplay] को कॉल करने की आवश्यकता होती है।

+8

ठीक है, अब आप अपना उत्तर स्वीकार कर सकते हैं। – Klaas

+2

आईओएस 7 पर मेरे लिए काम नहीं कर रहा है ... –

+0

आईओएस 9 में मेरे लिए काम करना –

1

उसी समस्या में भाग लें क्योंकि मेरे कुछ cellForRowAtIndexpath पृष्ठभूमि धागे में थे। इस मामले में समाधान मुख्य थ्रेड में किसी भी प्रत्यक्ष सेल सबव्यू अपडेट को मजबूर करना है:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
    if (cell.tag == indexPath.row){ 
     // data retrieval that may block main thread and cause temp freeze... 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      // update any cell subviews here 
     } 
    } 
});