UITableView - bölüm üstbilgisi rengini değiştir


Yanıtlar:


393

Umarım UITableViewDelegateprotokolden bu yöntem başlamanıza yardımcı olacaktır:

Objective-C:

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{
  UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
  if (section == integerRepresentingYourSectionOfInterest)
     [headerView setBackgroundColor:[UIColor redColor]];
  else 
     [headerView setBackgroundColor:[UIColor clearColor]];
  return headerView;
}

Swift:

func tableView(_ tableView: UITableView!, viewForHeaderInSection section: Int) -> UIView!
{
  let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: 30))
  if (section == integerRepresentingYourSectionOfInterest) {
    headerView.backgroundColor = UIColor.redColor()
  } else {
    headerView.backgroundColor = UIColor.clearColor()
  }
  return headerView
}

Güncelleme 2017:

Hızlı 3:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
    {
        let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: 30))
        if (section == integerRepresentingYourSectionOfInterest) {
            headerView.backgroundColor = UIColor.red
        } else {
            headerView.backgroundColor = UIColor.clear
        }
        return headerView
    }

[UIColor redColor]İstediğinizi değiştirin UIColor. Boyutlarını da ayarlamak isteyebilirsiniz headerView.


17
Self.tableView.sectionHeaderHeight kullanarak bölüm üstbilgisi boyutunu ayarlamanıza yardımcı olabilir. Aksi takdirde, bölüm başlığı için görüntülediğiniz metni görmekte sorun yaşayabilirsiniz.
Tony Lenzi

[UIColor xxxColor]Ancak photoshop'tan alabileceğim gibi özel bir renk denediğimde iyi çalışıyor (bu yüzden kullanarak UIColor red:green:blue:alpha:, sadece beyaz. Yanlış bir şey mi yapıyorum?
Matej

Ayrı bir soru gönderin, yardım etmeye çalışacağız. Kaynak kodunu ekleyin.
Alex Reynolds

12
Bu cevabın (doğru olsa da) içeriği olmayan bir UIView döndüreceğini unutmayın.
Greg M. Krsak

7
Bu oldukça eski bir bilgidir ve sadece başka bir görünüm oluşturmak en iyi cevap değildir. Fikir doğru görünümü elde etmek ve üzerindeki rengi veya renk tonunu değiştirmek. Aşağıdaki cevap willDisplayHeaderView kullanarak çok daha iyi bir yaklaşımdır.
Alex Zavatone

741

Bu eski bir soru, ama cevabın güncellenmesi gerektiğini düşünüyorum.

Bu yöntem, kendi özel görünümünüzü tanımlamayı ve oluşturmayı içermez. İOS 6 ve sonraki sürümlerde, arka plan rengini ve metin rengini

-(void)tableView:(UITableView *)tableView 
    willDisplayHeaderView:(UIView *)view 
    forSection:(NSInteger)section

bölüm delege yöntemi

Örneğin:

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
    // Background color
    view.tintColor = [UIColor blackColor];

    // Text Color
    UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
    [header.textLabel setTextColor:[UIColor whiteColor]];

    // Another way to set the background color
    // Note: does not preserve gradient effect of original header
    // header.contentView.backgroundColor = [UIColor blackColor];
}

Buradaki yazımdan alındı: https://happyteamlabs.com/blog/ios-how-to-customize-table-view-header-and-footer-colors/

Swift 3/4

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){
    view.tintColor = UIColor.red
    let header = view as! UITableViewHeaderFooterView
    header.textLabel?.textColor = UIColor.white
}

2
Bunun SDK'ya eklendiği hakkında hiçbir fikrim yoktu. Parlak! Kesinlikle doğru cevap.
JRod

1
OP - Lütfen kabul edilen cevabı güncelleyin. Eski yaklaşımlardan çok daha temiz.
Kyle Clegg

10
Bu benim için çalışmıyor gibi görünüyor. Metin rengi çalışır ancak başlık arka planının renk tonu çalışmaz. Ben iOS 7.0.4 üstündeyim
zeeple

10
user1639164, header.backgroundView.backgroundColor = [UIColor blackColor] kullanabilirsiniz; başlık arka planının renk tonunu ayarlamak için.
觞 慭 流 觞

2
@Kent belli bir süre geçti, ama gelecekteki insanlar için header.contentView.backgroundColor = [UIColor blackColor];seçenek size opak bir başlık verecek
SparkyRobinson

98

Metin rengini nasıl değiştireceğiniz aşağıda açıklanmıştır.

UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10, 3, tableView.bounds.size.width - 10, 18)] autorelease];
label.text = @"Section Header Text Here";
label.textColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.75];
label.backgroundColor = [UIColor clearColor];
[headerView addSubview:label];

18
Teşekkürler DoctorG - Bu yararlı oldu. BTW - dataSource tarafından sağlanan mevcut etiketi tutmak için, 2. satırı şöyle değiştirdim: label.text = [tableView.dataSource tableView: tableView titleForHeaderInSection: section]; Kötü bir form olabilir, ama benim için çalıştı. Belki bu başka birine yardım edebilir.
JJ Rohrer

1
@JJ Tablonun bölüm başlığını tanımlamak için başlangıçta kullanacağınız yöntemi kullandığınız için bu form gerçekten iyidir.
Tim

3
Otomatik çalıştırmayı kaldırdım ve açık bir sürüme değiştirdim. UITableView biçimlendirme yöntemleri birçok kez çağrılır. Mümkün olduğunda otomatik yayın kullanmaktan kaçının.
memmons

@Harkonian, gönderilen cevabı değiştirmek yerine, lütfen cevaba yapılan bir yorumda değişikliği önerin. Bir düzenlemeyle diğer kişilerin kodunu değiştirmek kötü bir form olarak kabul edilir. Yazım hataları ve kötü biçimlendirme ve dilbilgisi adil bir oyundur.
Tin Man

1
AddSubview: UILabel yerine, yalnızca viewForHeaderInSection içinde UILabel döndürüyor olmalısınız. UILable zaten bir UIView :)
Nas Banov

52

Özel renk içeren bir başlık istiyorsanız bunu yapabilirsiniz:

[[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]];

Bu çözüm iOS 6.0'dan beri harika çalışıyor.


1
hm ... benim için çalışmıyor. iOS 6 simülatörü ve iOS 7 cihazını denedi. Bu şekilde test yaptın mı? Nereye yerleştirmeliyim?
Maxim Kholyavkin

Uygulamada yapılabilir: didFinishLaunchingWithOptions: uygulama temsilcisi.
Leszek Zarna

benim hatam: UITableViewStyleGrouped BTW: Bu şekilde metin rengini değiştirmek için bu şekilde kullanılmaya
çalıştım

Özel UIView içindeyse, sadece init init yöntemini kullanın.
felixwcf

31

Aşağıdaki çözüm , iOS 8+ ile Swift 1.2 için çalışır

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

    // This changes the header background
    view.tintColor = UIColor.blueColor()

    // Gets the header view as a UITableViewHeaderFooterView and changes the text colour
    var headerView: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView
    headerView.textLabel.textColor = UIColor.redColor()

}

22

UITableViewHeaderFooterView'da arka plan rengini ayarlamak kullanımdan kaldırıldı. Lütfen contentView.backgroundColorbunun yerine kullanın.


21

Bu kod parçasını temsilciden eklemeyi unutmayın, aksi takdirde görünümünüz kesilir veya tablonun arkasında görünümünüzün / etiketinizin yüksekliğine göre görünür.

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 30;
}

Dj6

21

Main.storyboard üzerinde yaklaşık 2 saniye içinde yapabilirsiniz.

  1. Tablo Görünümünü Seç
  2. Öznitelik Müfettişine Git
  3. Liste öğesi
  4. Alt başlığı görüntüle seçeneğine ilerleyin
  5. Arka planı değiştir"

Buraya bir bak


18

Özel bir görünüm oluşturmak istemiyorsanız, rengi şu şekilde de değiştirebilirsiniz (iOS 6 gerektirir):

-(void) tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
    if ([view isKindOfClass: [UITableViewHeaderFooterView class]]) {
        UITableViewHeaderFooterView* castView = (UITableViewHeaderFooterView*) view;
        UIView* content = castView.contentView;
        UIColor* color = [UIColor colorWithWhite:0.85 alpha:1.]; // substitute your color here
        content.backgroundColor = color;
    }
}

13

Bölüm alanının arka planını ve metin rengini ayarlayın: ( William Jockuschve sayesinde Dj S)

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
    if ([view isKindOfClass: [UITableViewHeaderFooterView class]]) {
        UITableViewHeaderFooterView* castView = (UITableViewHeaderFooterView*) view;
        castView.contentView.backgroundColor = [UIColor grayColor];
        [castView.textLabel setTextColor:[UIColor grayColor]];
    }
}

13

Hızlı 4

Değiştirmek için arka plan rengini , metin etiket rengini ve yazı tipini bir UITableView Bölüm Başlık View için yeterlidir geçersiz willDisplayHeaderViewşöyle Tablo görünümü için:

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        let header = view as! UITableViewHeaderFooterView
        header.backgroundView?.backgroundColor = .white
        header.textLabel?.textColor = .black
        header.textLabel?.font = UIFont(name: "Helvetica-Bold", size: 14)
} 

Bu benim için mükemmel çalıştı; Umarım size de yardımcı olur!


UITableViewHeaderFooterView'da arka plan rengini ayarlamak kullanımdan kaldırıldı. Bunun yerine backgroundView özelliğine istediğiniz arka plan rengiyle özel bir UIView ayarlamanız gerekir.
mojtaba al moussawi

10

Başlık görünümünde nasıl resim ekleyeceğiniz aşağıda açıklanmıştır:

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{
    UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
    UIImageView *headerImage = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"top-gery-bar.png"]] autorelease];

    headerImage.frame = CGRectMake(0, 0, tableView.bounds.size.width, 30);

    [headerView addSubview:headerImage];

    return headerView;
}

8

İOS8 (Beta) ve Swift için istediğiniz RGB Rengini seçin ve şunu deneyin:

override func tableView(tableView: UITableView!, viewForHeaderInSection section: Int) -> UIView! {
    var header :UITableViewHeaderFooterView = UITableViewHeaderFooterView()

    header.contentView.backgroundColor = UIColor(red: 254.0/255.0, green: 190.0/255.0, blue: 127.0/255.0, alpha: 1)
    return header

}

("Geçersiz kılma", projemde normal bir UIViewController yerine UITableViewController'ı kullandığım için var, ancak bölüm üstbilgisi rengini değiştirmek için zorunlu değil)

Başlığınızın metni görünmeye devam edecektir. Bölüm başlığı yüksekliğini ayarlamanız gerekeceğini unutmayın.

İyi şanslar.


6

SWIFT 2

Bölüm arka plan rengini eklenen bir bulanıklaştırma efekti (gerçekten harika) ile başarılı bir şekilde değiştirebildim. Bölümün arka plan rengini kolayca değiştirmek için:

  1. İlk önce Storyboard'a gidin ve Tablo Görünümünü seçin
  2. Öznitelik Müfettişine Git
  3. Liste öğesi
  4. Görünüm'e gidin
  5. Arka planı değiştir"

Ardından bulanıklık efekti için koda ekleyin:

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

    // This is the blur effect

    let blurEffect = UIBlurEffect(style: .Light)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)

    // Gets the header view as a UITableViewHeaderFooterView and changes the text colour and adds above blur effect
    let headerView: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView
    headerView.textLabel!.textColor = UIColor.darkGrayColor()
    headerView.textLabel!.font = UIFont(name: "HelveticaNeue-Light", size: 13)
    headerView.tintColor = .groupTableViewBackgroundColor()
    headerView.backgroundView = blurEffectView

}

5

Cevabını biliyorum, Her ihtimale karşı, Swift'i aşağıdakileri kullanın

    override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let tableViewWidth = self.tableView.bounds

        let headerView = UIView(frame: CGRectMake(0, 0, tableViewWidth.size.width, self.tableView.sectionHeaderHeight))
        headerView.backgroundColor = UIColor.greenColor()

        return headerView
    }

4

iOS 8+

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        tableView.tableHeaderView?.backgroundColor = UIColor.blue()
}

4

Swift 3 kullanarak @ DJ S cevabını temel alır. Bu iOS 10'da harika çalışır.

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    // Background color
    view.tintColor = UIColor.black

    // Text Color
    let headerView = view as! UITableViewHeaderFooterView
    headerView.textLabel?.textColor = UIColor.white
}

3

İOS 7.x'te statik tablo görünümü hücreleri kullanan bir projem var. willDisplayHeaderView tetiklenmiyor. Ancak, bu yöntem işe yarar:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    NSLog(@"%s", __FUNCTION__);
    CGRect headerFrame = CGRectMake(x, y, w, h);    
    UIView *headerView = [[UIView alloc] initWithFrame:headerFrame];  
    headerView.backgroundColor = [UIColor blackColor];

3
 -(void) tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view
  forSection:(NSInteger)section
  {
        if ([view isKindOfClass: [UITableViewHeaderFooterView class]])
        {
             UITableViewHeaderFooterView *castView = (UITableViewHeaderFooterView *) view;
             UIView *content = castView.contentView;
             UIColor *color = [UIColor whiteColor]; // substitute your color here
             content.backgroundColor = color;
             [castView.textLabel setTextColor:[UIColor blackColor]];
        }
 }

3

Bence bu kod o kadar da kötü değil.

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = tableView.dequeueReusableHeaderFooterViewWithIdentifier(MyHeaderView.reuseIdentifier) as MyHeaderView
    let backgroundView = UIView()
    backgroundView.backgroundColor = UIColor.whiteColor()
    headerView.backgroundView = backgroundView
    headerView.textLabel.text = "hello"
    return headerView
}

3

Swift 4 bunu çok kolaylaştırıyor. Bunu sınıfınıza ekleyin ve rengi gerektiği gibi ayarlayın.

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        view.backgroundColor = UIColor(red: 0.094, green: 0.239, blue: 0.424, alpha: 1.0)
    }

ya da basit bir renk

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        view.backgroundColor = UIColor.white
    }

Swift 5 için güncellendi

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        view.tintColor = UIColor(red: 0.094, green: 0.239, blue: 0.424, alpha: 1.0)
    }

ya da basit bir renk

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        view.tintColor = UIColor.white
    }

4
iOS 13'te "view.backgroundColor" yerine "view.tintColor" yazın.
Bogdan Razvan

2

İOS 7.0.4'te kendi XIB'si olan özel bir başlık oluşturdum. Burada daha önce bahsedilen hiçbir şey işe yaramadı. UITableViewHeaderFooterView ile çalışmak için alt sınıf olması gerekiyordu ve sınıf dequeueReusableHeaderFooterViewWithIdentifier:arka plan rengi ile ilgili olarak çok inatçı gibi görünüyor. Sonunda customBackgroudView adıyla bir UIView (kod veya IB ile yapabilirsin) ekledim ve sonra bunun backgroundColor özelliğini ayarlayın. LayoutSubviews: Bu görünümün çerçevesini sınırlara ayarladım. İOS 7 ile çalışır ve hata vermez.

// in MyTableHeaderView.xib drop an UIView at top of the first child of the owner
// first child becomes contentView

// in MyTableHeaderView.h
@property (nonatomic, weak) IBOutlet UIView * customBackgroundView;

// in MyTableHeaderView.m
-(void)layoutSubviews;
{
    [super layoutSubviews];

    self.customBackgroundView.frame = self.bounds;
}
// if you don't have XIB / use IB, put in the initializer:
-(id)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
    ...
    UIView * customBackgroundView = [[UIView alloc] init];
    [self.contentView addSubview:customBackgroundView];
    _customBackgroundView = customBackgroundView;
    ...
}


// in MyTableViewController.m
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    MyTableHeaderView * header = [self.tableView
                                          dequeueReusableHeaderFooterViewWithIdentifier:@"MyTableHeaderView"];
    header.customBackgroundView.backgroundColor = [UIColor redColor];
    return header;
}

2

Üstbilgi görünümünün katmanının rengini değiştirmeniz yeterlidir

- (UIView *) tableView: (UITableView *) tableView viewForHeaderInSection: (NSInteger) bölümü 
{
  UIView * headerView = [[[UIView ayırma] initWithFrame: CGRectMake (0, 0, tableView.bounds.size.width, 30)] otomatik yayın];
 headerView.layer.backgroundColor = [UIColor clearColor] .CGColor
}


2

Herhangi birinin hızlı olması gerekiyorsa, başlığı tutar:

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let view = UIView(frame: CGRect(x: 0,y: 0,width: self.tableView.frame.width, height: 30))
    view.backgroundColor = UIColor.redColor()
    let label = UILabel(frame: CGRect(x: 15,y: 5,width: 200,height: 25))
    label.text = self.tableView(tableView, titleForHeaderInSection: section)
    view.addSubview(label)
    return view
}

2

Konsol günlüğü üzerinden Xcode'dan mesaj aldım

[TableView] UITableViewHeaderFooterView üzerinde arka plan renginin ayarlanması kaldırıldı. Lütfen bunun yerine backgroundView özelliğine istediğiniz arka plan rengiyle özel bir UIView ayarlayın.

Sonra sadece yeni bir UIView oluşturuyorum ve HeaderView'ın arka planı olarak yerleştiriyorum. İyi bir çözüm değil ama Xcode'un dediği gibi kolay.


2

Benim durumumda, şöyle çalıştı:

let headerIdentifier = "HeaderIdentifier"
let header = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: headerIdentifier)
header.contentView.backgroundColor = UIColor.white

2

Arka plan görünümünün arka plan rengini ayarlamanız yeterlidir:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){         
  let tableHeader = view as! UITableViewHeaderFooterView        
  tableHeader.backgroundView?.backgroundColor = UIColor.white     
}

1

RubyMotion / RedPotion ile bunu TableScreen'inize yapıştırın:

  def tableView(_, willDisplayHeaderView: view, forSection: section)
    view.textLabel.textColor = rmq.color.your_text_color
    view.contentView.backgroundColor = rmq.color.your_background_color
  end

Tıkır tıkır çalışıyor!


1

Hızlı 5 + için

In willDisplayHeaderViewYöntemi

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

     //For Header Background Color
     view.tintColor = .black

    // For Header Text Color
    let header = view as! UITableHeaderFooterView
    header.textLabel?.textColor = .white
}

Umarım bu sana yardımcı olur :]


0

Her ne func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)kadar işe yarayacak olsa da, başka bir temsilci yöntemi uygulamadan bunu elde edebilirsiniz. size de func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?yöntemin kullanabileceğiniz view.contentView.backgroundColor = UIColor.whiteyerine view.backgroundView?.backgroundColor = UIColor.whitehangi çalışmıyor. (Bunun backgroundViewisteğe bağlı olduğunu biliyorum , ama orada olsa bile, bu uygulamadan uyanmıyorwillDisplayHeaderView

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.