Làm cách nào để thay đổi màu của tiêu đề phần trong UITableView?
EDIT : Câu trả lời được cung cấp bởi DJ-S nên được xem xét cho iOS 6 trở lên. Câu trả lời được chấp nhận là hết hạn.
Làm cách nào để thay đổi màu của tiêu đề phần trong UITableView?
EDIT : Câu trả lời được cung cấp bởi DJ-S nên được xem xét cho iOS 6 trở lên. Câu trả lời được chấp nhận là hết hạn.
Câu trả lời:
Hy vọng phương pháp này từ UITableViewDelegate
giao thức sẽ giúp bạn bắt đầu:
Mục tiêu-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;
}
Nhanh:
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
}
Cập nhật 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
}
Thay thế [UIColor redColor]
bằng bất cứ điều gì UIColor
bạn muốn. Bạn cũng có thể muốn điều chỉnh kích thước của headerView
.
[UIColor xxxColor]
Tuy nhiên, nó hoạt động tốt khi tôi thử một màu tùy chỉnh như màu tôi có thể nhận được từ photoshop (vì vậy sử dụng UIColor red:green:blue:alpha:
, nó chỉ có màu trắng. Tôi có làm gì sai không?
Đây là một câu hỏi cũ, nhưng tôi nghĩ rằng câu trả lời cần phải được cập nhật.
Phương pháp này không liên quan đến việc xác định và tạo chế độ xem tùy chỉnh của riêng bạn. Trong iOS 6 trở lên, bạn có thể dễ dàng thay đổi màu nền và màu văn bản bằng cách xác định
-(void)tableView:(UITableView *)tableView
willDisplayHeaderView:(UIView *)view
forSection:(NSInteger)section
phương pháp đại biểu
Ví dụ:
- (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];
}
Lấy từ bài đăng của tôi ở đây: 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];
tùy chọn sẽ cung cấp cho bạn một tiêu đề mờ đục
Đây là cách thay đổi màu văn bản.
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];
Bạn có thể làm điều này nếu bạn muốn tiêu đề với màu tùy chỉnh:
[[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]];
Giải pháp này hoạt động rất tốt kể từ iOS 6.0.
Giải pháp sau đây hoạt động cho Swift 1.2 với 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()
}
Đừng quên thêm đoạn mã này từ đại biểu hoặc chế độ xem của bạn sẽ bị cắt hoặc xuất hiện phía sau bảng trong một số trường hợp, liên quan đến chiều cao của chế độ xem / nhãn của bạn.
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 30;
}
Nếu bạn không muốn tạo chế độ xem tùy chỉnh, bạn cũng có thể thay đổi màu như thế này (yêu cầu 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;
}
}
Đặt màu nền và màu văn bản của khu vực phần: (Nhờ William Jockusch
và 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]];
}
}
Swift 4
Để thay đổi màu nền , màu nhãn văn bản và phông chữ cho Chế độ xem tiêu đề của Phần UITableView, chỉ cần ghi đè willDisplayHeaderView
cho chế độ xem bảng của bạn như sau:
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)
}
Điều này làm việc hoàn hảo cho tôi; hy vọng nó cũng giúp bạn
Dưới đây là cách thêm hình ảnh trong chế độ xem tiêu đề:
- (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;
}
Đối với iOS8 (Beta) và Swift, chọn Màu RGB bạn muốn và thử điều này:
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
}
("Ghi đè" là có từ khi iMim sử dụng UITableViewControll thay vì UIViewContoder bình thường trong dự án của tôi, nhưng nó không bắt buộc phải thay đổi màu tiêu đề của phần)
Văn bản của tiêu đề của bạn sẽ vẫn được nhìn thấy. Lưu ý rằng bạn sẽ cần điều chỉnh chiều cao tiêu đề của phần.
Chúc may mắn.
Chuyển 2
Tôi đã có thể thay đổi thành công màu nền của phần với hiệu ứng làm mờ được thêm vào (rất tuyệt). Để thay đổi màu nền của phần dễ dàng:
Sau đó, để tạo hiệu ứng mờ, thêm vào mã:
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
}
Tôi biết câu trả lời của nó, chỉ trong trường hợp, Trong Swift sử dụng như sau
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()
}
Dựa trên câu trả lời @Dj S, sử dụng Swift 3. Điều này hoạt động rất tốt trên 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
}
Tôi có một dự án sử dụng các ô xem bảng tĩnh, trong iOS 7.x. willDisplayHeaderView không kích hoạt. Tuy nhiên, phương pháp này hoạt động tốt:
- (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]];
}
}
Tôi nghĩ rằng mã này không quá tệ.
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 làm cho nó rất dễ dàng. Đơn giản chỉ cần thêm nó vào lớp của bạn và đặt màu khi cần thiết.
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)
}
hoặc nếu một màu đơn giản
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.backgroundColor = UIColor.white
}
Đã cập nhật cho 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)
}
hoặc nếu một màu đơn giản
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.tintColor = UIColor.white
}
Trong iOS 7.0.4, tôi đã tạo một tiêu đề tùy chỉnh với XIB của riêng nó. Không có gì được đề cập ở đây trước khi làm việc. Nó phải là lớp con của UITableViewHeaderFooterView để hoạt động với dequeueReusableHeaderFooterViewWithIdentifier:
và có vẻ như lớp đó rất cứng đầu về màu nền. Vì vậy, cuối cùng tôi đã thêm một UIView (bạn có thể làm điều đó bằng mã hoặc IB) với tên customBackgroudView, và sau đó đặt thuộc tính backgroundColor. Trong layoutSubview: Tôi đặt khung của khung nhìn đó thành giới hạn. Nó hoạt động với iOS 7 và không có trục trặc.
// 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;
}
Chỉ cần thay đổi màu của lớp của chế độ xem tiêu đề
- Bảng (UIView *) Xem: (UITableView *) bảng Xem viewForHeaderInSection: (NSInteger) { UIView * headerView = [[[UIView alloc] initWithFrame: CGRectMake (0, 0, tableView.bound.size. Thong, 30)] autorelease]; headerView.layer.backgroundColor = [UIColor ClearColor] .CGColor }
Nếu bất cứ ai cần nhanh chóng, giữ tiêu đề:
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
}
Tôi nhận được tin nhắn từ Xcode thông qua nhật ký giao diện điều khiển
[TableView] Đặt màu nền trên UITableViewHeaderFooterView đã không được chấp nhận. Thay vào đó, vui lòng đặt UIView tùy chỉnh với màu nền mong muốn của bạn vào thuộc tính backgroundView.
Sau đó, tôi chỉ cần tạo một UIView mới và đặt nó làm nền của HeaderView. Không phải là một giải pháp tốt nhưng nó dễ dàng như Xcode đã nói.
Trong trường hợp của tôi, nó hoạt động như thế này:
let headerIdentifier = "HeaderIdentifier"
let header = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: headerIdentifier)
header.contentView.backgroundColor = UIColor.white
Chỉ cần đặt màu nền của chế độ xem nền:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){
let tableHeader = view as! UITableViewHeaderFooterView
tableHeader.backgroundView?.backgroundColor = UIColor.white
}
Với RubyMotion / RedPotion, dán phần này vào TableScreen của bạn:
def tableView(_, willDisplayHeaderView: view, forSection: section)
view.textLabel.textColor = rmq.color.your_text_color
view.contentView.backgroundColor = rmq.color.your_background_color
end
Hoạt động như một lá bùa!
Đối với nhanh 5+
Trong willDisplayHeaderView
phương pháp
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
}
Tôi hy vọng cái này sẽ giúp bạn :]
Mặc dù func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
sẽ hoạt động tốt, bạn có thể đạt được điều này mà không cần thực hiện phương pháp ủy nhiệm khác. trong func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
phương pháp của bạn , bạn có thể sử dụng view.contentView.backgroundColor = UIColor.white
thay vì view.backgroundView?.backgroundColor = UIColor.white
không hoạt động. (Tôi biết đó backgroundView
là tùy chọn, nhưng ngay cả khi nó ở đó, điều này không gây ra mà không thực hiệnwillDisplayHeaderView