UITableViewCell सफेद पृष्ठभूमि दिखाता है और iOS7 पर संशोधित नहीं किया जा सकता है


186

मैंने एक कस्टम टेबल व्यू सेल क्लास लागू किया है जो इनहेरिट करता है UITableViewCell। टेबलव्यू में बैकग्राउंड इमेज होती है, इसलिए मैं चाहता हूं कि सेल का बैकग्राउंड पारदर्शी हो। यह iOS7 से पहले बहुत अच्छा लग रहा है।

हालांकि, iOS7 में, सेल को हमेशा सफेद पृष्ठभूमि के साथ दिखाया जाता है।


यहां तक ​​कि Xcode7, 2015 के लिए, स्टोरीबोर्ड में एक बग है : आपको सेल में पृष्ठभूमि का रंग कोड में सेट करना होगा।


आप सीधे प्रॉपर्टी के बैकग्राउंड कलर को एक्सेस करके सेल का बैकग्राउंड कलर बदल सकते हैं। cell.backgroundColor = [UIColor clearColor];
वीरूमाक्स

जवाबों:


384

जैसा कि Apple DOC ने कहा ( UITableViewCell Class Reference ):

... आईओएस 7 में, कोशिकाओं में डिफ़ॉल्ट रूप से एक सफेद पृष्ठभूमि होती है ; iOS के पुराने संस्करणों में, सेल एन्कोडिंग टेबल दृश्य की पृष्ठभूमि का रंग प्राप्त करते हैं। यदि आप किसी सेल का बैकग्राउंड कलर बदलना चाहते हैं, तो tableView में ऐसा करें : willDisplayCell: forRowAtIndexPath: आपके टेबल व्यू डेलिगेट का तरीका।

तो मेरे मामले के लिए कि पारदर्शी पृष्ठभूमि के साथ कोशिकाओं को दिखाने के लिए, बस नीचे दी गई तालिका दृश्य नियंत्रक में प्रतिनिधि विधि को लागू करने की आवश्यकता है:

- (void)tableView:(UITableView *)tableView
  willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
  [cell setBackgroundColor:[UIColor clearColor]];
}

बस ध्यान दें : जैसा कि @null ने कहा, "... इंटरफ़ेस बिल्डर में एक बग प्रतीत होता है ..." , मुझे पूरी तरह से यकीन नहीं है कि क्या इसमें बग है, लेकिन ऐसा लगता है कि उसकी टिप्पणी को कई वोट मिले। यदि आप आईबी का उपयोग करते हैं तो कुछ गलत हो सकता है। :)


53
दुर्भाग्य से सच नहीं है, इंटरफ़ेस बिल्डर में एक बग प्रतीत होता है और मैं इसे स्टोरीबोर्ड से अपने कस्टम सेल में सेट नहीं कर सकता।
तारेक हल्क

1
@null, aha, लगता है कि iOS 7 SDK में अभी भी बहुत सारे कीड़े हैं जिन्हें ठीक करने की आवश्यकता है। मैं पहले से ही कुछ से मिल चुका हूं, लेकिन स्टोरीबोर्ड से संबंधित के लिए, मुझे कोई पता नहीं है। :)
काजुल

4
आप इसे tableView:cellForRowAtIndexPath:विधि में भी कर सकते हैं ।
Bugloaf

1
@KendallHelmstetterGelner यकीन है? मैंने अभी तक इस पर ध्यान नहीं दिया है, लगता है अभी भी मेरे लिए काम करता है। :)
काजुल

1
जैसा कि बुग्लॉफ़ ऊपर कहता है - इसे तालिका में देखें: cellForRowAtIndexPath:
amergin

66

मैंने इसकी थोड़ी जांच-पड़ताल की और पता चला कि सेल बैकग्राउंड कलरर अपीयरेंस सिस्टम द्वारा सेट किया गया है। तो अगर आपके आवेदन की सभी कोशिकाओं में स्पष्ट पृष्ठभूमि है, तो सबसे आसान समाधान होगा:

[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];

और भले ही उनकी पृष्ठभूमि अलग हो, लेकिन स्पष्ट रंग डिफ़ॉल्ट के रूप में सबसे सुविधाजनक लगता है।


1
तुम मेरे दोस्त एक राक्षस हो। मैंने अपने सभी उपवर्गों को अपने अधीन कर लिया हैUITableViewCell , इसलिए यह मेरे लिए कोई मुद्दा नहीं था कि मैं बीजी रंग सेट करने के लिए एक इनिशियलाइज़र के साथ एक सुपरक्लास प्रदान clearColorकरूं, लेकिन लगता है क्या? यह काम नहीं किया ... मेरा मतलब है, क्यों, सेब?
माजिद

यह काम। हालांकि, सफेद रंग देखने से बाहर निकलता है। सर्वश्रेष्ठ प्रभाव (कोई पॉपिंग नहीं) के लिए शीर्ष प्रतिक्रिया के साथ गया।
कार्ल प्रेहन

@ एटन फिलिमोनोव मैंने अपने अपडेल में टेबल व्यू सेल की उपस्थिति को एक विशेष दृश्य में निर्धारित किया है अब मैं सेल के लिए अलग रंग रखना चाहता हूं मैं इस परिदृश्य को कैसे देख सकता हूं? मैं CellWillDisplay प्रतिनिधि विधि में अलग रंग सेट करने की कोशिश की है, लेकिन कोई प्रभाव नहीं। क्या आप इस पर मेरी मदद कर सकते हैं
पीर मोहम्मद थबीब

@PeerMohamedThabib कृपया पर्यावरण (iPad / iPhone, iOS संस्करण) के बारे में कुछ और बताएं और कुछ कोड प्रदान करें। और वास्तव में आप स्वयं स्थिति की जांच कर सकते हैं - बस UITableViewCell का एक उपवर्ग बनाएं, setBackgroundColor को फिर से परिभाषित करें: विधि (सिर्फ सुपरक्लास के कार्यान्वयन को अंदर बुलाएं) और इस पद्धति को एक विराम बिंदु दें और आप देखेंगे कि, आपके द्वारा सेट किए जाने के बाद सेल का रंग क्या बदलता है। अंदर का दृश्य: विसीप्लेसीसेलएटइंडेक्सपैथ:
एंटोन

1
भले ही आपके पास मिश्रित कोशिकाएं हैं, कुछ पृष्ठभूमि के साथ और कुछ बिना (पारदर्शी)। सबसे आसान तरीका एक कस्टम वर्ग को परिभाषित करना और एक ही कोड लिखना है। इस तरह सभी UITableViewCell वर्गों के सभी डिफ़ॉल्ट पर रहेंगे और कस्टम कक्षाओं में स्पष्ट रंग होगा। [[CustomTableCell उपस्थिति] setBackgroundColor: [UIColor ClearColor]]; यह अभेद्य UITableViewCells को प्रभावित नहीं करेगा, और केवल कस्टम कोशिकाओं पर प्रभाव डालता है।
अंसारी

30

रिटर्न सेल से पहले इसे अपने सेलफ़ोररॉएटइंडेक्सपैथ विधि में लिखें;

cell.backgroundColor = [UIColor clearColor];

1
इसने मुझे iPhone 5 पर iOS 8 में एक समस्या के साथ मदद की
अलोमो

13

डिफ़ॉल्ट पृष्ठभूमि का रंग UITableViewCellIOS 7 में सफेद है।

आपको backgroundColorअपने कोड में कहीं संपत्ति सेट करनी होगी । उदाहरण के लिए, नए सेल बनाने के बाद इसे सेट करें।

cell.backgroundColor = [UIColor clearColor];

मैंने कोशिश की लेकिन यह मेरे लिए काम नहीं किया है। क्या आप सुनिश्चित हैं कि यह काम करता है?
मटरू अलेक्जेंडर

मेरे लिए initWithCoder में एक कस्टम टेबल व्यू सेल के लिए काम करता है: aDecoder विधि।
ftvs

13

मैंने वास्तव में पाया कि मुद्दा UITableView की पृष्ठभूमि के रंग से स्पष्ट नहीं होने के कारण उत्पन्न हुआ था। यदि आप UITableViewCell का बैकग्राउंड रंग बदलने के लिए साफ़ करते हैं और आप पा रहे हैं कि आप अभी भी सफ़ेद दिखाई दे रहे हैं, तो सुनिश्चित करें कि UITableView का बैकग्राउंड रंग साफ़ करने के लिए सेट है (या जो आप चाहते हैं)।

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

स्विफ्ट में

tableView.backgroundView = nil
tableView.backgroundColor = UIColor.clearColor()

सिर्फ FYI करें आप इसे IB में भी सेट कर सकते हैं। बस यह सुनिश्चित करें कि आप 'व्यू' सेक्शन के भीतर बैकग्राउंड कलर को बदलते हैं, न कि सिर्फ 'टेबल व्यू' सेक्शन को, जिसका जाहिर तौर पर कोई ध्यान देने योग्य प्रभाव नहीं है।
एंडी डन

1
यह मेरे लिए भी काम करता है, मैं इसके तेज संस्करण की तलाश में था। मेरे लिए कोड में जो काम किया गया उसे जोड़ा गया :)
मुगुनथान बालकृष्णन

10

यह निश्चित रूप से एक आईओएस बग है। IOS 8 में, Interface BuilderiPhone के लिए ठीक काम करता है में पृष्ठभूमि रंग की स्थापना , लेकिन iPad में यह हमेशा होता है whiteColor। इसे ठीक करने के लिए, cellForIndexPathडेटा स्रोत संदेश में, इसे इसमें डाला जाए:

cell.backgroundColor = cell.backgroundColor

और यह काम करेगा। यही कारण है कि मैंने कहा कि यह एक बग है क्योंकि कोड ही बहुत अधिक बकवास * टी है, लेकिन यह काम करता है।


फिर भी Xcode7 / iOS9 के लिए मामला। मैंने तालिका में स्पष्ट कोड जोड़ा है: willDisplayCell: forRowAtIndexPath जैसा कि ऊपर बताया गया है।
एंड्रयू डंकन

XCode 7.0.1 संकलित सार्वभौमिक ऐप में आईओएस 7,8,9 पर चलने वाले आईफोन पर काली पृष्ठभूमि दिखाई गई, लेकिन आईओएस 9.0.2 पर चलने वाले आईपैड पर सफेद पृष्ठभूमि (और शायद अन्य लोग सत्यापित नहीं कर सकते हैं)। उपरोक्त कोड ने इसे ठीक कर दिया।
स्कूटीबी

स्थिर तालिका दृश्य ओवरराइड के लिए .DisplayCell के साथ cell.backgroundColor = UIColor.clearColor ()। आईबी में रंग सेट करना मेरे लिए कारगर नहीं रहा।
विक्टर कुचेरा

4

यह हो सकता है कि आपका UITableViewCell डिफ़ॉल्ट रूप से चुना गया हो .. आप Xcode 6s नए विज़ुअल डीबगर का उपयोग करके इसकी पुष्टि कर सकते हैं (या पता करें कि कौन सा दृश्य इस श्वेत कोशिका के प्रकट होने का कारण बन रहा है)।

यहां छवि विवरण दर्ज करें

दिलचस्प बात यह है कि यह जानने के बाद .. स्पष्ट करने के लिए चयनित सेल की पृष्ठभूमि का रंग सेट करना अभी भी काम नहीं आया .. कुछ और शोध करना, मुझे पता है कि मुझे इस कस्टम सेल को बनाते समय चयन शैली को संशोधित करना था:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // do customization here
    }
    self.selectionStyle = UITableViewCellSelectionStyleNone;
    [self setBackgroundColor:[UIColor clearColor]];
    return self;
}

दृश्य डिबगर के लिए टूटी हुई कड़ी
Suragch

3

मैंने पाया कि उपरोक्त में से कोई भी XCode 5.1.1, iOS 7.1 से काम नहीं करता है।

यदि आप प्रोटोटाइप सेल के साथ इंटरफेस बिल्डर का उपयोग कर रहे हैं, तो प्रोटोटाइप सेल का चयन करें, फिर व्यू सेक्शन में मौजूद विशेषताओं के चयनकर्ता से, बैकग्राउंड फॉर्म को क्लियर कलर में बदलें:

यहां छवि विवरण दर्ज करें

यह ठीक काम करने लगता है। उपरोक्त कोड परिवर्तनों में से किसी की भी आवश्यकता नहीं है, या तो - यह एक शुद्ध आईबी समाधान है।


2

स्वीकृत उत्तर ने मेरे लिए समस्या को ठीक नहीं किया। मुझे यह करना था:

  1. इंटरफ़ेस बिल्डर में, तालिका दृश्य चुनें। फिर गुण निरीक्षक से, दृश्य अनुभाग से, पृष्ठभूमि को पारदर्शी (0% अस्पष्टता) पर सेट करें ।

यहां छवि विवरण दर्ज करें

  1. तालिका के डेटा स्रोत वर्ग कक्ष सेForRtAndIndexPath विधि:

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
        reuseIdentifier:CellIdentifier];
    cell.backgroundColor = [UIColor clearColor]; //Make cell transparent

ठीक है, आप इंटरफ़ेस बिल्डर का उपयोग करते हैं .. जैसा कि @null ने मेरे उत्तर के नीचे टिप्पणी की, "... इंटरफ़ेस बिल्डर में एक बग लगता है ..." , मुझे पूरी तरह से यकीन नहीं है कि क्या यह बग है, लेकिन ऐसा लगता है कि कारण टिप्पणी को कई वोट मिले। ;)
काजुल

जब यह पारदर्शी सेल पृष्ठभूमि की बात आती है, तो iOS7 में कुछ निश्चित रूप से छोटी गाड़ी है। मुझे उम्मीद है कि मेरा जवाब दूसरों की मदद करेगा जो मेरे जैसी ही स्थिति का सामना कर रहे हैं।
राजवी

यह आपके टेबलव्यू के लिए सेल बनाने का सही तरीका नहीं है, खासकर यदि आप इंटरफ़ेस बिल्डर / स्टोरीबोर्ड का उपयोग कर रहे हैं। कोड स्निपेट में आप हर बार एक नया सेल बना रहे हैं, जब आपके प्रतिनिधि को एक के लिए कहा जाता है, तो यह पुन: उपयोग नहीं होता है! सेल-पुन: उपयोग के प्रदर्शन लाभ प्राप्त करने के लिए आपको उपयोग करना चाहिए cell = [tableView dequeueReusableCellWithIdentifier:<#Reuse ID#> forIndexPath:indexPath]। पिछले संस्करणों में आप indexPath तर्क को छोड़ देते हैं और फिर initWithStyle:reuseIdentifiernil के मामले में अपने कोड स्निपेट के अनुसार झटपट, nil के लिए परीक्षण करते हैं ।
इकुरामेडिया

ikuramedia: मैंने अपने पोस्ट से पुन: उपयोग कोड छोड़ दिया। बेशक, मैं कोशिकाओं का पुन: उपयोग करता हूं। वह इस पद की बात नहीं है।
राजवी

2

मेरे लिए या cell.backgroundColor = cell.contentView.backgroundColor; तो नौकरी करना या सेट करना।tableView:willDisplayCell:forRowAtIndexPath:tableView:cell:forRowAtIndexPath:

यह इसलिए है क्योंकि मैंने इंटरफ़ेस बिल्डर में सामग्री के दृश्य रंग को वांछित रूप में सेट किया है।


1

सेल में UI ऑब्जेक्ट्स को जोड़ते समय, Xcode 5 / IOS 7 एक नया "कंटेंट व्यू" जोड़ता है, जो सेल में सभी तत्वों का पर्यवेक्षण होगा। सेल का बैकग्राउंड कलर सेट करने के लिए इस कंटेंट व्यू का बैकग्राउंड कलर सेट करें। ऊपर दिए गए समाधान मेरे लिए काम नहीं करते, लेकिन इसने मेरे लिए अच्छा काम किया।


सामग्री का दृश्य पिछले एसडीके संस्करणों में उपलब्ध है या तो, आप केवल सेल के पृष्ठभूमि दृश्य को कवर करने वाले सामग्री दृश्य के लिए एक पृष्ठभूमि रंग निर्धारित करते हैं।
काजुल

खैर, यह xcode 5 से पहले इंटरफ़ेस बिल्डर में स्वचालित रूप से पॉपअप नहीं करता है। वास्तव में आपकी बात क्या है?
DrBug

मेरा मतलब है, आपके उत्तर ने किसी अन्य मुद्दे पर चर्चा की, न कि मेरे प्रश्न के लिए कहा। आप बस अपने सेल के लिए बैकग्राउंड कलर सेट करना चाहते हैं, है ना? इसलिए आईओएस 7 में किसी भी प्रकार की कोशिकाओं की डिफ़ॉल्ट रूप से सफेद पृष्ठभूमि नहीं होती है या नहीं, आप इसे हमेशा सामग्री दृश्य के लिए एक रंग निर्धारित करके इसे लागू कर सकते हैं, जिससे सेल की पृष्ठभूमि दृश्य पर सामग्री दृश्य देता है। सही बात? ;)
किजुल

1

स्विफ्ट 1.2 समाधान:

बस अपने सेल के बैकग्राउंड कलर के लिए एक स्पष्ट परिभाषा जोड़ें:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    // Configure the cell...
    cell.backgroundColor = UIColor.clearColor()

    return cell
}

माफ़ करना। यह मेरा बुरा है। यह काम करता हैं। मुझे कुछ अन्य सेटिंग्स याद आईं।
किम

1

इसी तरह की समस्या थी, था

  1. चयन के रूप में नीला सेट करें
  2. इसे सही करने के लिए इसे कोड में जोड़ें

    override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    
      var bgColorView: UIView = UIView()
      bgColorView.backgroundColor = UIColor(red: (76.0 / 255.0), green: (161.0 / 255.0), blue: (255.0 / 255.0), alpha: 1.0)
      bgColorView.layer.masksToBounds = true
      tableView.cellForRowAtIndexPath(indexPath)!.selectedBackgroundView = bgColorView
      return true
    }

0

अपने यूआईटेबल व्यू सेल को आकर्षक बनाने के लिए आप कलर कोड का भी उपयोग कर सकते हैं।

[cell setBackgroundColor:[self colorWithHexString:@"1fbbff"]];

यह रंग कोड विधि लागू करने के लिए कोड है:

-(UIColor*)colorWithHexString:(NSString*)hex
{
    NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];


    if ([cString length] < 6) return [UIColor grayColor];

    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];

    if ([cString length] != 6) return  [UIColor grayColor];

    NSRange range;
    range.location = 0;
    range.length = 2;
    NSString *rString = [cString substringWithRange:range];

    range.location = 2;
    NSString *gString = [cString substringWithRange:range];

    range.location = 4;
    NSString *bString = [cString substringWithRange:range];

    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];

    return [UIColor colorWithRed:((float) r / 255.0f)
                         green:((float) g / 255.0f)
                          blue:((float) b / 255.0f)
                         alpha:1.0f];
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.