UITableViewHeaderFooterView: पृष्ठभूमि का रंग बदलने में असमर्थ


124

मैं UITableViewHeaderFooterView की पृष्ठभूमि का रंग बदलने की कोशिश कर रहा हूं। यद्यपि दृश्य दिखाई दे रहा है, पृष्ठभूमि रंग डिफ़ॉल्ट रंग रहता है। मुझे यह कहते हुए xcode से लॉग मिल रहा है:

UITableViewHeaderFooterView पर पृष्ठभूमि का रंग निर्धारित किया गया है। कृपया इसके बजाय contentView.backgroundColor का उपयोग करें।

हालाँकि, निम्न विकल्पों में से कोई भी काम नहीं करता है:

myTableViewHeaderFooterView.contentView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundColor = [UIColor blackColor];

मैंने xib फ़ाइल में दृश्य का पृष्ठभूमि रंग बदलने का भी प्रयास किया है।

कोई सुझाव? धन्यवाद।


2
iOS 13 में, contentView.backgroundColor का उपयोग करें मेरे लिए काम किया। मुझे लगता है कि Apple ने इसे अपडेट किया
Tà Truhoada

जवाबों:


94

आपको या तो myTableViewHeaderFooterView.tintColor का उपयोग करना चाहिए, या myTableViewHeaderFooterView.backgroundView के लिए एक कस्टम पृष्ठभूमि दृश्य असाइन करना चाहिए।


2
myTableViewHeaderFooterView.tintColor पूरी तरह से काम करता है। जवाब के लिए धन्यवाद!
चुन

15
पता नहीं क्यों, लेकिन मेरे लिए tintColoriOS7 पर काम नहीं कर रहा। मैं केवल कस्टम दृश्य निर्दिष्ट करके रंग बदल सकता था:myTableViewHeaderFooterView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]];
Skywinder

7
TintColor पृष्ठभूमि रंग नहीं है !!
जोओ न्यून्स

189

iOS 8, 9, 10, 11 ...

किसी भी रंग (किसी भी अल्फा के साथ) को सेट करने का एकमात्र तरीका उपयोग करना है backgroundView:

तीव्र

self.backgroundView = UIView(frame: self.bounds)
self.backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)

Obj सी

self.backgroundView = ({
    UIView * view = [[UIView alloc] initWithFrame:self.bounds];
    view.backgroundColor = [UIColor colorWithWhite: 0.5 alpha:0.5];
    view;
    });

टिप्पणियाँ के लिए जवाब

  • इनमें से कोई भी अन्य विकल्प मज़बूती से काम नहीं करता (नीचे टिप्पणियों के बावजूद)

    // self.contentView.backgroundColor = [UIColor clearColor];
    // self.backgroundColor = [UIColor clearColor];
    // self.tintColor = [UIColor clearColor];
  • backgroundViewआकार अपने आप बदल जाता है। (अड़चन जोड़ने की जरूरत नहीं)

  • नियंत्रण अल्फा के साथ UIColor(white: 0.5, alpha: 0.5)या backgroundView.alpha = 0.5
    (बेशक, किसी भी रंग करेंगे)

  • XIB का उपयोग करते समय , रूट दृश्य a UITableViewHeaderFooterViewऔर सहयोगी बनाएंbackgroundView प्रोग्राम को :

    के साथ पंजीकरण:

    tableView.register(UINib(nibName: "View", bundle: nil),
                       forHeaderFooterViewReuseIdentifier: "header")

    इसके साथ लोड करें:

    override func tableView(_ tableView: UITableView,
                            viewForHeaderInSection section: Int) -> UIView? {
        if let header =
            tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") {
            let backgroundView = UIView(frame: header.bounds)
            backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
            header.backgroundView = backgroundView
            return header
        }
        return nil
    }

डेमो

↻ रीप्ले एनीमेशन

H GitHub पर इस समाधान का पता लगाएं और स्विफ्ट व्यंजनों पर अतिरिक्त विवरण ।


5
contentView मौजूद नहीं है इसीलिए। tintcolor को उसकी पृष्ठभूमि को नहीं देखना है। और backgroundcolor पदावनत है। इस प्रकार आपका तरीका काम करने का तरीका है। Btw अच्छा कोड सिंटैक्स
João Nunes

@ JoãoNunes, C # / Xamarin के साथ वाक्य रचना और भी अधिक है:view.BackgroundView = new UIView(view.Bounds) { BackgroundColor = UIColor.Clear };
crishoj

Xcode 6.1.1 में, आपको एक रन-टाइम कंसोल चेतावनी मिलती है:Setting the background color on UITableViewHeaderFooterView has been deprecated. Please use contentView.backgroundColor instead.
अल्बर्ट बोरी

Xcode6.2 Beta5 के साथ, मुझे अभी भी वही चेतावनी मिली है। UITableViewHeaderFooterView की मेरी निर्माण विधि लोडिंग xib पर आधारित है जो Apple नमूना कोड, TVAimimationsGestures के समान है। हालाँकि, Xcode6.2b5 के साथ TVAnimationGestures कोई चेतावनी संदेश उत्पन्न नहीं करता है। Apple कोड में 'बैकग्राउंड' स्ट्रिंग नहीं है। बेशक, TVAnimationsGestures में uitableVuewHeaderFooterview.contentView शून्य है। मुझे समझ नहीं आता कि ऐसा क्यों होता है।
किमीगिटानी

7
उन लोगों के लिए जो अभी भी चेतावनी प्राप्त करते हैं: सुनिश्चित करें कि UITableViewHeaderFooterView के पास IB में एक बैकग्राउंडर सेट नहीं है।
१२:१६

24

आईओएस 7 में contentView.backgroundColorमेरे लिए काम किया, tintColorनहीं किया।

   headerView.contentView.backgroundColor = [UIColor blackColor];

हालांकि clearColorमेरे लिए काम नहीं किया, मैंने जो समाधान पाया वह backgroundViewपारदर्शी छवि के लिए संपत्ति निर्धारित करना है। शायद यह किसी की मदद करेगा:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0.0);
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

headerView.backgroundView = [[UIImageView alloc] initWithImage:blank];

मुझे लगता है कि यह @SwiftArchitect के उत्तर (हालांकि यह काम किया है) की तुलना में बेहतर दृष्टिकोण है। तथ्य यह है कि आप एक नया UIView जोड़ने के लिए नहीं है यह बेहतर तरीका है। मेरे लिए पूरी तरह से काम किया।
एरिक ए। मोंटानाज

14

सुनिश्चित करें कि आपने contentViewअपने लिए पृष्ठभूमि का रंग निर्धारित किया है UITableViewHeaderFooterView:

self.contentView.backgroundColor = [UIColor whiteColor];

तब यह काम करेगा।


iOS> = 10 केवल!। IOS के लिए <10 उपयोग करें: backgroundView? ?BackgroundColor = UIColor.white
पीटर क्रिनज़

12

मेरे लिए मैंने ऊपर बताई गई सभी चीज़ों की कोशिश की, लेकिन अभी भी चेतावनी मिल रही थी "UITableViewHeaderFooterView पर बैकग्राउंड कलर सेट करने को हटा दिया गया है। कृपया इसके बजाय contentView.backgroundColor का उपयोग करें।" फिर मैंने यह कोशिश की: xib फ़ाइल के भीतर हेडर दृश्य के लिए पृष्ठभूमि का रंग डिफ़ॉल्ट के बजाय रंग को साफ़ करने के लिए चुना गया था एक बार जब मैंने इसे डिफ़ॉल्ट रूप से बदल दिया तो चेतावनी चली गई। यह था

इसमें बदलाव किया गया


7

एक स्पष्ट रंग के लिए, मैं उपयोग करता हूं

self.contentView.backgroundColor = [UIColor clearColor];
self.backgroundView = [UIView new];
self.backgroundView.backgroundColor = [UIColor clearColor];

यह मुझे ठीक लगता है।


1
सेटिंग करना backgroundView = UIView()और फिर backgroundColor = .clearएकमात्र काम करना समाधान था। धन्यवाद।
Vive

7

ठोस पृष्ठभूमि रंगों के लिए, सेटिंग contentView.backgroundColorपर्याप्त होनी चाहिए:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.contentView.backgroundColor = .red // Works!
    }
}

रंग सहित पारदर्शिता के लिए .clear, यह अब काम नहीं करता है:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.contentView.backgroundColor = .clear // Does not work 😞
    }
}

पूर्ण पारदर्शी अनुभाग शीर्ष लेख के लिए, backgroundViewसंपत्ति को खाली दृश्य पर सेट करें :

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.backgroundView = UIView() // Works!
    }
}

हालांकि, संभावित दुष्प्रभावों से सावधान रहें। जब तक टेबल दृश्य "समूहीकृत" पर सेट नहीं हो जाता, तब तक अनुभाग हेडर नीचे स्क्रॉल करते समय शीर्ष पर स्नैप करेंगे। यदि अनुभाग हेडर पारदर्शी हैं, तो सेल सामग्री को देखा जाएगा, जो बहुत अच्छा नहीं लग सकता है।

यहाँ, अनुभाग हेडर में पारदर्शी पृष्ठभूमि है:

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

इसे रोकने के लिए, अनुभाग हेडर की पृष्ठभूमि को आपके टेबल व्यू या व्यू कंट्रोलर की पृष्ठभूमि से मेल खाते हुए ठोस रंग (या ग्रेडिएंट) में सेट करना बेहतर है।

यहां, अनुभाग हेडर में पूरी तरह से अपारदर्शी ढाल पृष्ठभूमि है:

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


प्रतिभाशाली! पृष्ठभूमि के लिए एक खाली UIView को परिभाषित करने से मेरे लिए समस्या पूरी तरह से हल हो गई! धन्यवाद!
लुइज़ डायस

6

यहाँ छवि विवरण दर्ज करेंइंटरफ़ेस बिल्डर में, अपने .xib को, शीर्ष तत्व पर, विशेषता निरीक्षक में पृष्ठभूमि रंग को डिफ़ॉल्ट रूप से सेट करें। फिर कंटेंट व्यू पर जाएं और वहां बैकग्राउंड कलर सेट करें ( https://github.com/jiecao-fm/SwiftTheme/issues/24 के संदर्भ में )।


4

IOS9 पर headerView.backgroundView.backgroundColorमेरे लिए काम किया:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    TableViewHeader *headerView = (TableViewHeader *)[super tableView:tableView viewForHeaderInSection:section];
    headerView.backgroundView.backgroundColor = [UIColor redColor];
}

पर iOS8 मैं उपयोग कर रहा था headerView.contentView.backgroundColorसमस्याओं के बिना, लेकिन अब आईओएस 9 के साथ, मैं एक अजीब मुद्दा यह है कि पृष्ठभूमि रंग बनाया सेल के पूरे स्थान को भरने नहीं हो रही थी। इसलिए मैंने बस कोशिश की headerView.backgroundColorऔर मुझे ओपी से वही त्रुटि मिली।

UITableViewHeaderFooterView पर पृष्ठभूमि का रंग निर्धारित किया गया है। कृपया इसके बजाय contentView.backgroundColor का उपयोग करें।

तो अब सब कुछ महान काम करता है और चेतावनी के बिना उपयोग करके headerView.backgroundView.backgroundColor


4

यदि आपने फ़ाइल के UITableViewHeaderFooterViewसाथ एक कस्टम उपवर्ग बनाया है, xibतो आपको ओवरराइड करना चाहिए setBackgroundColor। इसे खाली रखें।

-(void)setBackgroundColor:(UIColor *)backgroundColor {

}

और इससे आपकी समस्या दूर हो जाएगी।


यह मेरे लिए सही उत्तर है। सोचा कि मैं अपने HeaderFooterView में कोई पृष्ठभूमि रंग सेट नहीं करता, लेकिन चेतावनी संदेश मेरे कंसोल लॉग में रहता है। गुस्सा कर देने वाला!
stan liu

4

यदि आप स्टोरीबोर्ड / नीब के साथ एक अनुभाग हेडर सेल को अनुकूलित कर रहे हैं , तो सुनिश्चित करें कि "टेबल सेक्शन हैडर" दृश्य के लिए पृष्ठभूमि का रंग डिफ़ॉल्ट है

और अगर आप उप-सूची UITableViewHeaderFooterViewबनाते हैं, और nib का उपयोग करते हैं, तो आपको जो करना है IBOutletवह सामग्री दृश्य के लिए बनाना है , और इसका नाम उदा। containerView। इससे भ्रमित नहीं होना हैcontentView , जो इस कंटेनर दृश्य के माता-पिता हैं।

उस सेटअप के साथ, आप containerViewइसके बजाय पृष्ठभूमि का रंग बदलते हैं ।


1

मैं उपस्थिति के साथ की कोशिश की। जब चेन, और यह मेरे लिए काम किया।

[[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], [UITableView class], nil] 
         setBackgroundColor: [UIColor.grayColor]];

1

हो सकता है क्योंकि पृष्ठभूमि दृश्य मौजूद नहीं है

override func draw(_ rect: CGRect){
    // Drawing code
    let view = UIView()
    view.frame = rect
    self.backgroundView = view
    self.backgroundView?.backgroundColor = UIColor.yourColorHere
}

वह काम मेरे लिए।


1

iOS 12, स्विफ्ट 5. यदि आप एक उपस्थिति प्रॉक्सी का उपयोग करने के लिए तैयार हैं (या कोशिश कर रहे हैं), तो निम्न समाधान काम करता है:

  1. उपवर्ग UITableViewHeaderFooterView और अपनी उपस्थिति प्रॉक्सी सेटिंग को उजागर करें।
final class MySectionHeaderView: UITableViewHeaderFooterView {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(reuseIdentifier: String?) {
        super.init(reuseIdentifier: reuseIdentifier)
    }

    @objc dynamic var forceBackgroundColor: UIColor? {
        get { return self.contentView.backgroundColor }
        set(color) {
            self.contentView.backgroundColor = color
            // if your color is not opaque, adjust backgroundView as well
            self.backgroundView?.backgroundColor = .clear
        }
    }
}
  1. अपनी इच्छित ग्रैन्युलैरिटी पर उपस्थिति प्रॉक्सी सेट करें।
MySectionHeaderView.appearance().forceBackgroundColor = .red

या

MySectionHeaderView.appearance(whenContainedInInstancesOf: [MyOtherClass.self]).forceBackgroundColor = .red

1

कठिनाइयों के बारे में भूल जाओ।

UITableViewHeaderFooterView+BGUpdate.swiftनीचे दिए गए कोड के साथ अपनी परियोजना में जोड़ें :

extension UITableViewHeaderFooterView {

    open override var backgroundColor: UIColor? {
        get {
            return self.backgroundColor
        }
        set {
            let bgView = UIView()
            bgView.backgroundColor = newValue
            backgroundView = bgView
        }
    }
}

उपयोग सरल है जैसा कि आप पहले अपेक्षित थे:

headerView.backgroundColor = .red

उपयोग के उदाहरण :

1) प्रतिनिधिमंडल में tableView:viewForHeaderInSection::

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = tv.dequeueReusableHeaderFooterView(withIdentifier: "MyHeaderView")
    headerView.backgroundColor = .red // <- here
    return headerView
}

या

2) अपने कस्टम हेडर व्यू क्लास में:

class MyHeaderView: UITableViewHeaderFooterView {

    override func awakeFromNib() {
        super.awakeFromNib()
        backgroundColor = .red // <- here
    }
}

ठीक है ... आपका रास्ता बेहतर है। :) धन्यवाद
एली बर्क

1
यह समाधान iOS 12 पर एक पुनरावर्ती लूप का कारण बनता है
कोप्पैसेटिक

0

स्पष्ट रंग के साथ BackgroundView सेट करना दृश्यमान हेडर के लिए ठीक काम करता है। यदि तालिका को नीचे की ओर हेडर दिखाने के लिए स्क्रॉल किया जाता है, तो यह समाधान विफल हो जाता है।

PSMy टेबल में बिना किसी सेल के केवल हेडर होते हैं।


0

स्विफ्ट:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView {
    var headerView: TableViewHeader = super.tableView(tableView, viewForHeaderInSection: section) as! TableViewHeader
    headerView.backgroundView.backgroundColor = UIColor.redColor()
}

0

UIView बनाएं और बैकग्राउंड कलर सेट करें, फिर इसे self.backgroundView पर सेट करें।

- (void)setupBackgroundColor:(UIColor *) color {
    UIView *bgView = [[UIView alloc] initWithFrame:self.bounds];
    bgView.backgroundColor = color;
    self.backgroundView = bgView;
}

0

मैं अपने अनुभव को साझा करने के लिए मजबूर महसूस करता हूं। मेरे पास कोड का यह टुकड़ा था जो iOS 10 और iOS 11 के साथ ठीक काम करता थाheaderView?.contentView.backgroundColor = .lightGray

फिर मैंने अचानक आईओएस 9 के लिए ऐप को तैनात करने का फैसला किया क्योंकि कुछ डिवाइस हैं (आईपैड मिनी कुछ पुरानी पीढ़ी 9 से परे किसी भी ओएस को अपडेट नहीं करती है) - एकमात्र समाधान जो सभी आईओएस 9, 10 और 11 के लिए काम करता है। हेडर के लिए एक आधार दृश्य को परिभाषित करना था जिसमें अन्य सभी हेडर साक्षात्कार शामिल हैं, इसे स्टोरीबोर्ड से तार दें और सेट करें backgroundColor और उस बेस व्यू को ।

आउटलेट को वायरिंग न करने पर आप इसे ध्यान में रखना चाहेंगे: backgroundViewक्योंकि पहले से ही कुछ में उस नाम के साथ एक संपत्ति हैsuperclass । मैंने अपना फोन कियाcontainingView

इसके अलावा जब आउटलेट नियंत्रण वायरिंग दृश्य पर क्लिक Document Outlineकरें तो यह सुनिश्चित करें कि यह वायर्ड नहीं हैfile owner


0
let bgView = UIView()
bgView.backgroundColor = UIColor.clear
backgroundView = bgView
backgroundColor = UIColor.clear
contentView.backgroundColor = UIColor.clear

हालांकि यह प्रश्न का उत्तर दे सकता है, इसे समीक्षा के लिए ध्वजांकित किया गया था। बिना किसी स्पष्टीकरण के उत्तर को अक्सर निम्न-गुणवत्ता माना जाता है। कृपया सही उत्तर क्यों है, इसके उत्तर में कुछ टिप्पणी दें।
दान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.