Bagaimana saya bisa mengubah warna header bagian di UITableView?
EDIT : Jawaban yang diberikan oleh DJ-S harus dipertimbangkan untuk iOS 6 ke atas. Jawaban yang diterima sudah usang.
Bagaimana saya bisa mengubah warna header bagian di UITableView?
EDIT : Jawaban yang diberikan oleh DJ-S harus dipertimbangkan untuk iOS 6 ke atas. Jawaban yang diterima sudah usang.
Jawaban:
Semoga metode dari UITableViewDelegate
protokol ini akan membantu Anda memulai:
Tujuan-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;
}
Cepat:
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
}
Diperbarui 2017:
Swift 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
}
Ganti [UIColor redColor]
dengan mana yang UIColor
Anda inginkan. Anda mungkin juga ingin menyesuaikan dimensi headerView
.
[UIColor xxxColor]
namun ketika saya mencoba warna kustom seperti yang bisa saya dapatkan dari photoshop (jadi menggunakan UIColor red:green:blue:alpha:
, itu hanya putih. Apakah saya melakukan sesuatu yang salah?
Ini adalah pertanyaan lama, tetapi saya pikir jawabannya perlu diperbarui.
Metode ini tidak melibatkan mendefinisikan dan membuat tampilan kustom Anda sendiri. Di iOS 6 dan yang lebih tinggi, Anda dapat dengan mudah mengubah warna latar dan warna teks dengan mendefinisikan
-(void)tableView:(UITableView *)tableView
willDisplayHeaderView:(UIView *)view
forSection:(NSInteger)section
metode delegasi bagian
Sebagai contoh:
- (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];
}
Diambil dari posting saya di sini: https://happyteamlabs.com/blog/ios-how-to-customize-table-view-header-and-footer-colors/
Cepat 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];
opsi akan memberi Anda sundulan buram
Berikut cara mengubah warna teks.
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];
Anda dapat melakukan ini jika Anda ingin tajuk dengan warna khusus:
[[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]];
Solusi ini berfungsi dengan baik sejak iOS 6.0.
Solusi berikut ini berfungsi untuk Swift 1.2 dengan iOS 8+
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()
}
Jangan lupa untuk menambahkan potongan kode ini dari delegasi atau tampilan Anda akan terpotong atau muncul di belakang tabel dalam beberapa kasus, relatif terhadap ketinggian tampilan / label Anda.
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 30;
}
Jika Anda tidak ingin membuat tampilan khusus, Anda juga dapat mengubah warna seperti ini (memerlukan iOS 6):
-(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;
}
}
Tetapkan latar belakang dan warna teks area bagian: (Terima kasih kepada William Jockusch
dan 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]];
}
}
Cepat 4
Untuk mengubah warna latar belakang , warna label teks dan font untuk Tampilan Header dari Bagian UITableView, cukup timpa willDisplayHeaderView
untuk tampilan tabel Anda seperti:
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)
}
Ini bekerja dengan baik untuk saya; harap itu membantu Anda juga!
Berikut cara menambahkan gambar dalam tampilan tajuk:
- (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;
}
Untuk iOS8 (Beta) dan Swift pilih Warna RGB yang Anda inginkan dan coba ini:
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
}
("Override" sudah ada sejak saya menggunakan UITableViewController alih-alih UIViewController normal dalam proyek saya, tetapi itu tidak wajib untuk mengubah warna bagian header)
Teks tajuk Anda masih akan terlihat. Perhatikan bahwa Anda harus menyesuaikan tinggi tajuk bagian.
Semoga berhasil.
SWIFT 2
Saya berhasil mengubah warna latar belakang bagian dengan efek blur tambahan (yang sangat keren). Untuk mengubah warna latar belakang bagian dengan mudah:
Kemudian untuk efek blur, tambahkan ke kode:
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
}
Saya tahu jawabannya, kalau-kalau, In Swift menggunakan yang berikut ini
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()
}
Berdasarkan jawaban @Dj S, menggunakan Swift 3. Ini berfungsi baik di iOS 10.
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
}
Saya punya proyek menggunakan sel tampilan tabel statis, di iOS 7.x. willDisplayHeaderView tidak menyala. Namun, metode ini berfungsi dengan baik:
- (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]];
}
}
Saya pikir kode ini tidak terlalu buruk.
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 membuatnya sangat mudah. Cukup tambahkan ini ke kelas Anda dan atur warnanya sesuai kebutuhan.
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)
}
atau jika warnanya sederhana
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.backgroundColor = UIColor.white
}
Diperbarui untuk Swift 5
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)
}
atau jika warnanya sederhana
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.tintColor = UIColor.white
}
Di iOS 7.0.4 saya membuat header khusus dengan XIB itu sendiri. Tidak ada yang disebutkan di sini sebelum bekerja. Itu harus menjadi subclass dari UITableViewHeaderFooterView untuk bekerja dengan dequeueReusableHeaderFooterViewWithIdentifier:
dan tampaknya kelas sangat keras kepala mengenai warna latar belakang. Jadi akhirnya saya menambahkan UIView (Anda bisa melakukannya dengan kode atau IB) dengan nama customBackgroudView, dan kemudian mengatur properti backgroundColor. Di layoutSubviews: Saya mengatur bingkai tampilan itu menjadi batas. Ini bekerja dengan iOS 7 dan tidak memberikan gangguan.
// 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;
}
Ubah saja warna layer dari tampilan header
- (UIView *) tableView: (UITableView *) tableView viewForHeaderInSection: (NSInteger) { UIView * headerView = [[[alokasi UIView] initWithFrame: CGRectMake (0, 0, tableView.bounds.size.width, 30)] autorelease]; headerView.layer.backgroundColor = [UIColor clearColor] .CGColor }
Jika ada yang butuh cepat, pertahankan judul:
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
}
Saya mendapat pesan dari Xcode melalui konsol log
[TableView] Mengatur warna latar belakang pada UITableViewHeaderFooterView telah ditinggalkan. Harap tetapkan UIView khusus dengan warna latar belakang yang Anda inginkan sebagai properti backgroundView.
Lalu saya hanya membuat UIView baru dan meletakkannya sebagai latar belakang HeaderView. Bukan solusi yang baik tetapi mudah seperti kata Xcode.
Dalam kasus saya, ini berfungsi seperti ini:
let headerIdentifier = "HeaderIdentifier"
let header = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: headerIdentifier)
header.contentView.backgroundColor = UIColor.white
Cukup atur warna latar belakang tampilan latar belakang:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){
let tableHeader = view as! UITableViewHeaderFooterView
tableHeader.backgroundView?.backgroundColor = UIColor.white
}
Untuk swift 5+
Dalam willDisplayHeaderView
Metode
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
}
Saya harap ini membantu Anda:]
Meskipun func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
akan bekerja dengan baik, Anda dapat mencapainya tanpa menerapkan metode delegasi lain. dalam func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
metode Anda , Anda dapat menggunakan view.contentView.backgroundColor = UIColor.white
alih-alih view.backgroundView?.backgroundColor = UIColor.white
yang tidak berfungsi. (Saya tahu itu backgroundView
opsional, tetapi bahkan ketika itu ada, ini tidak terbangun tanpa implementasiwillDisplayHeaderView