UITableXem nền rõ ràng


90

Tôi nhận ra rằng iOS 7 vẫn chưa chính thức được phát hành và chúng ta không nên thảo luận về nó NHƯNG tôi đang phát điên khi cố gắng tìm ra vấn đề này. Trên iOS 6, chế độ xem bảng của tôi trong suốt và trông rất tuyệt. Lần đầu tiên chạy iOS 7, và nền là màu trắng.

Tôi đã thử tạo màu nền của bảng, màu ô, v.v. thành UIColor clearColor nhưng không có gì thay đổi.

Làm thế nào để khắc phục sự cố này?

cái bàn


1
Đã cố gắng thiết lập bảng backgroundViewthành rõ ràng?
Hoàn tác

Bạn có thể hiển thị mã nơi bạn đang đặt màu nền không? Còn chế độ xem của phụ huynh thì sao? Có lẽ nền chế độ xem bảng đã rõ ràng nhưng phụ huynh thì không?
sooper

Tôi cũng nhận thấy điều này nhưng khi tôi cài đặt cùng một ứng dụng có trước phiên bản hiện tại của tôi lên iOS 7.0 thì điều đó đã không xảy ra. Vấn đề này nằm ở xCode5.0 sau đó?
Totumus Maximus

Câu trả lời:


123
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

trong cellForRowAtIndexPath

Ngoài ra, hãy đảm bảo rằng chế độ xem bảng của bạn thực sự có nền trong suốt (trong bảng phân cảnh): nhập mô tả hình ảnh ở đây


George, thêm mã bên trong phương pháp này - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
IanStallings

1
Đối với các trường hợp, nếu bạn thực sự cần chọnBackgroundView, bạn có thể đặt thông tin sau vào cellForRowAtIndexPath: cell.selectedBackgroundView = [[[UIImageView Distribution] initWithImage: [UIImage imageNamed: @ "yourBgImage.png"]] autorelease]; hoặc thậm chí trong AwakeFromNib: self.selectedBackgroundView = ... Lưu ý rằng: self.backgroundColor = [UIColor clearColor]; không hoạt động trong AwakeFromNib trong iOS7. Nhưng: cell.backgroundColor = [UIColor clearColor]; chỉ hoạt động bình thường trong cellForRowAtIndexPath dành cho iOS 7.0
slamor

11
Chỉ cần thêm hàng: cell.backgroundColor = [UIColor clearColor];
evya

Điều này hoạt động giống như charm cell.backgroundColor = [UIColor clearColor];
bpolat

Làm cách nào để thực hiện điều này trong Swift?
Qadir Hussain

58

Để nó ở đây:

cell.backgroundColor = [UIColor clearColor];

Trong phần này:

cellForRowAtIndexPath

1
Trong iOS 6, chỉ cần đặt ở backgroundViewchế độ xem trống là đủ , nhưng mã bổ sung này là cần thiết cho iOS 7.
Kevin Borders

25

Trước tiên, hãy thử đặt backgroundView thành nil.

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

Không chắc liệu đây có phải là thay đổi trong tài liệu với iOS7 hay đã luôn ở đó và chỉ không ảnh hưởng đến màu nền, nhưng theo Tham chiếu lớp UITableView @property backgroundView

"Bạn phải đặt thuộc tính này thành nil để đặt màu nền của chế độ xem bảng."

sửa: cú pháp mã đã sửa


25

Điều này đã được trả lời, nhưng không chính xác theo nhiều cách.

Bạn cần triển khai phương pháp ủy quyền dưới đây:

    - (void)tableView:(UITableView *)tableView  willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
}

Bạn không thể đặt bản sửa lỗi trong cellForRowAtIndexPath vì đó là sau khi ô được hiển thị và nó sẽ nhấp nháy nền trắng trước khi nền được đặt thành xóa (trên các thiết bị chậm hơn).

Sử dụng phương pháp ủy quyền này và vấn đề của bạn được giải quyết!


1
Đúng. Đối với iOS 7, đây là cách để xóa nền. Tất cả các đề xuất khác ở trên có thể không hoạt động.
girish_vr

15

Trên thực tế, vị trí chính thức chính xác để thay đổi màu nền của ô là khác nhau theo tài liệu ( Tham khảo lớp UITableViewCell ):

Cho dù bạn sử dụng ô tùy chỉnh hay xác định trước, bạn có thể thay đổi nền của ô bằng cách sử dụng thuộc tính backgroundView hoặc bằng cách thay đổi thuộc tính backgroundColor được kế thừa. Trong iOS 7, các ô có nền trắng theo mặc định; trong các phiên bản iOS trước đó, các ô kế thừa màu nền của chế độ xem bảng bao quanh. Nếu bạn muốn thay đổi màu nền của một ô, hãy làm như vậy trong tableView: willDisplayCell: forRowAtIndexPath: phương thức của đại biểu dạng xem bảng của bạn.


Tôi đang thử điều này, nhưng các ô đầu tiên được hiển thị đều có nền trắng. Nếu tôi tạo các ô mới bằng cách cuộn, thì chúng sẽ có nền trong suốt mà tôi muốn. Không chắc chắn những gì khác để thử ...
David Dunham

Đừng bận tâm, nó dường như là một vấn đề về thời gian. Tôi đang làm công việc trong AwakeFromNib, còn quá sớm.
David Dunham


6

Đây là một vấn đề khá khó chịu. Đây là giải pháp hiện tại của tôi:

Thêm điều này vào UITableViewCelllớp con của bạn .

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

Ôi Chúa ơi. Cảm ơn bạn. Đã cứu đêm của tôi. Câu trả lời của bạn nên được chấp nhận.
Michal Shatz

5

Điều này đã làm việc cho tôi trong iOS7 +:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

và sau đó trong cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];


4

Điều này chỉ hoạt động đối với tôi khi tôi đã chỉnh sửa màu nền rõ ràng cho từng ô và màu rõ ràng cho chính bảng .. CẢ HAI LẬP TRÌNH

để thiết lập màu rõ ràng cho bảng:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

để đặt màu cho các ô:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}

3

Một điều tốt đẹp. Màu mặc định của UITable có vẻ là màu trắng (tôi không biết tại sao)

Nền trắng

Nhưng tốt hơn hãy thay đổi điều đó.


Hoàn hảo! Đó là sự bình yên còn thiếu. Không cần dòng mã bổ sung!
Morpheus78,

3

Tập đầu tiên

tableView.backgroundColor = [UIColor clearColor];

Bộ thứ hai

tableCell.backgroundColor = [UIColor clearColor];

3

tạo IB Outlet cho dạng xem bảng @IBOutlet yếu var yourTable: UITableView!

trong tải xem

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

nếu bạn muốn xóa màu của Cell, hãy làm điều này trong

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.backgroundColor = UIColor.clearColor() 

}

2

Trong ứng dụng của tôi, tôi phải đặt màu backgroundColortrên UITableViewCelllớp của mình thành [UIColor clearColor]màu khi tôi cập nhật cho iOS 7.


2

Thử

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

cell.backgroundColor = [UIColor clearColor];

2

Trong trường hợp của tôi, ô được tạo bằng cách sử dụng xib. có vẻ như trình tạo giao diện trên xcode5 gặp sự cố khi đặt clearColor thành cell.backgroundColor.

Tất cả những gì tôi cần làm thực sự là thiết lập

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}

kiểm soát đạt đến cuối chức năng non-void
ropo

2

Chỉ cần chọn Clear Color trên View Background cho bảng và cho cả ô.


2

nhanh chóng 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}

1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];

0

Bộ

tableView.backgroundColor = [UIColor clearColor];

trong viewDidLoad.

nếu điều này không hoạt động, hãy thử:

tableView.backgroundView = nil;

0

Trong 3 nhanh

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.