UITableView'da bölüm başlığının rengini nasıl değiştirebilirim?
EDIT : DJ-S tarafından verilen cevap iOS 6 ve üstü için düşünülmelidir. Kabul edilen cevap güncel değil.
UITableView'da bölüm başlığının rengini nasıl değiştirebilirim?
EDIT : DJ-S tarafından verilen cevap iOS 6 ve üstü için düşünülmelidir. Kabul edilen cevap güncel değil.
Yanıtlar:
Umarım UITableViewDelegate
protokolden 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
.
[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?
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
}
header.contentView.backgroundColor = [UIColor blackColor];
seçenek size opak bir başlık verecek
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];
Ö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.
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()
}
Ö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;
}
}
Bölüm alanının arka planını ve metin rengini ayarlayın: ( William Jockusch
ve 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]];
}
}
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!
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;
}
İ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.
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:
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
}
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
}
iOS 8+
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
tableView.tableHeaderView?.backgroundColor = UIColor.blue()
}
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
}
İ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];
-(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]];
}
}
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
}
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
}
İ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;
}
Ü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 }
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
}
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.
Benim durumumda, şöyle çalıştı:
let headerIdentifier = "HeaderIdentifier"
let header = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: headerIdentifier)
header.contentView.backgroundColor = UIColor.white
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
}
Hızlı 5 + için
In willDisplayHeaderView
Yö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 :]
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.white
yerine view.backgroundView?.backgroundColor = UIColor.white
hangi çalışmıyor. (Bunun backgroundView
isteğe bağlı olduğunu biliyorum , ama orada olsa bile, bu uygulamadan uyanmıyorwillDisplayHeaderView