พื้นหลังที่ชัดเจน UITableView


90

ฉันรู้ว่า iOS 7 ยังไม่ได้เปิดตัวอย่างเป็นทางการและเราไม่ควรพูดถึงเรื่องนี้ แต่ฉันแทบจะบ้าที่พยายามหาปัญหานี้ ใน iOS 6 มุมมองตารางของฉันโปร่งใสและดูดี ครั้งแรกที่ใช้ iOS 7 และพื้นหลังเป็นสีขาว

ฉันได้ลองสร้าง backgroundColor ของตาราง, สีของเซลล์และอื่น ๆ เป็น UIColor clearColor แต่ไม่มีการเปลี่ยนแปลง

จะแก้ไขปัญหานี้ได้อย่างไร?

โต๊ะ


1
พยายามตั้งค่าตารางbackgroundViewให้ชัดเจนหรือไม่?
เลิกทำ

คุณช่วยแสดงรหัสที่คุณตั้งค่าสีพื้นหลังได้ไหม มุมมองผู้ปกครองเป็นอย่างไร บางทีพื้นหลังของมุมมองตารางจะชัดเจน แต่ผู้ปกครองไม่?
sooper

ฉันสังเกตเห็นสิ่งเดียวกันนี้ แต่เมื่อฉันติดตั้งแอพเดียวกันกับเวอร์ชันปัจจุบันของฉันเป็น iOS 7.0 มันไม่เกิดขึ้น ปัญหานี้อยู่ใน xCode5.0 หรือไม่?
Totumus Maximus

คำตอบ:


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

ใน cellForRowAtIndexPath

ตรวจสอบให้แน่ใจว่า tableview ของคุณมีพื้นหลังโปร่งใส (ในสตอรีบอร์ด): ป้อนคำอธิบายภาพที่นี่


จอร์จเพิ่มรหัสนั้นในเมธอด - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
IanStallings

1
ในกรณีนี้หากคุณต้องการ selectedBackgroundView จริงๆคุณสามารถใส่สิ่งต่อไปนี้ใน cellForRowAtIndexPath: cell.selectedBackgroundView = [[[UIImageView จัดสรร] initWithImage: [UIImage imageNamed: @ "yourBgImage.png"]] autorelease]; หรือแม้กระทั่งใน AwakeFromNib: self.selectedBackgroundView = ... โปรดทราบว่า self.backgroundColor = [UIColor clearColor]; ไม่ทำงานใน AwakenFromNib ใน iOS7 แต่: cell.backgroundColor = [UIColor clearColor]; ทำงานได้อย่างถูกต้องเฉพาะใน cellForRowAtIndexPath สำหรับ iOS 7.0
slamor

11
จำเป็นต้องเพิ่มแถวเท่านั้น: cell.backgroundColor = [UIColor clearColor];
evya

ใช้งานได้เหมือน charm cell.backgroundColor = [UIColor clearColor];
bpolat

วิธีทำใน Swift
Qadir Hussain

58

ใส่สิ่งนี้:

cell.backgroundColor = [UIColor clearColor];

ในส่วนนี้:

cellForRowAtIndexPath

1
ใน iOS 6 นั้นเพียงพอที่จะตั้งค่าbackgroundViewเป็นมุมมองที่ว่างเปล่า แต่จำเป็นต้องใช้รหัสเพิ่มเติมนี้สำหรับ iOS 7
Kevin Borders

25

ลองตั้งค่า backgroundView เป็นศูนย์ก่อน

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

ไม่แน่ใจว่านี่เป็นการเปลี่ยนแปลงในเอกสารประกอบกับ iOS7 หรือมีมาโดยตลอดและไม่ส่งผลต่อสีพื้นหลัง แต่ตามUITableView Class Reference @property backgroundView

"คุณต้องตั้งค่าคุณสมบัตินี้เป็นศูนย์เพื่อกำหนดสีพื้นหลังของมุมมองตาราง"

แก้ไข: แก้ไขรหัสไวยากรณ์


25

สิ่งนี้ได้รับคำตอบ แต่ไม่ถูกต้องในหลาย ๆ ด้าน

คุณต้องใช้วิธีการมอบสิทธิ์ด้านล่าง:

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

คุณไม่สามารถใส่การแก้ไขใน cellForRowAtIndexPath ได้เนื่องจากเป็นหลังจากที่เซลล์แสดงผลแล้วและจะกะพริบเป็นพื้นหลังสีขาวก่อนที่พื้นหลังจะถูกตั้งค่าให้ชัดเจน (บนอุปกรณ์ที่ช้ากว่า)

ใช้วิธีการมอบหมายนี้และปัญหาของคุณจะได้รับการแก้ไข!


1
ใช่. สำหรับ iOS 7 นี่คือวิธีล้างพื้นหลัง คำแนะนำอื่น ๆ ทั้งหมดข้างต้นอาจใช้ไม่ได้
girish_vr

15

จริงๆแล้วตำแหน่งที่ถูกต้องอย่างเป็นทางการในการเปลี่ยนสีพื้นหลังของเซลล์นั้นแตกต่างกันไปตามเอกสาร ( การอ้างอิงคลาส UITableViewCell ):

ไม่ว่าคุณจะใช้เซลล์ที่กำหนดไว้ล่วงหน้าหรือกำหนดเองคุณสามารถเปลี่ยนพื้นหลังของเซลล์โดยใช้คุณสมบัติ backgroundView หรือโดยการเปลี่ยนคุณสมบัติ backgroundColor ที่สืบทอดมา ใน iOS 7 เซลล์จะมีพื้นหลังสีขาวตามค่าเริ่มต้น ใน iOS เวอร์ชันก่อนหน้าเซลล์จะสืบทอดสีพื้นหลังของมุมมองตารางที่แนบมา หากคุณต้องการเปลี่ยนสีพื้นหลังของเซลล์ให้ทำใน tableView: willDisplayCell: forRowAtIndexPath: วิธีการของผู้รับมอบสิทธิ์มุมมองตารางของคุณ


ฉันกำลังลองสิ่งนี้ แต่เซลล์แรกที่แสดงทั้งหมดมีพื้นหลังสีขาว ถ้าฉันสร้างเซลล์ใหม่โดยการเลื่อนมันจะมีพื้นหลังโปร่งใสที่ฉันต้องการ ไม่แน่ใจว่าจะลองอะไรดี…
David Dunham

ไม่เป็นไรดูเหมือนว่าจะเป็นปัญหาเรื่องเวลา ฉันกำลังทำอะไรอยู่ในรายการ AwakenFromNib ซึ่งเร็วเกินไป
David Dunham


6

นี่เป็นปัญหาที่น่าหงุดหงิดทีเดียว นี่คือวิธีแก้ปัญหาปัจจุบันของฉัน:

เพิ่มสิ่งนี้ในUITableViewCellคลาสย่อยของคุณ

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

โอ้พระเจ้า. ขอขอบคุณ. บันทึกคืนของฉัน คำตอบของคุณควรได้รับการยอมรับแล้ว
Michal Shatz

5

สิ่งนี้ใช้ได้กับฉันใน iOS7 +:

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

แล้วเข้า cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];

4

ลองใช้ข้อมูลโค้ดนี้

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];

4

สิ่งนี้ใช้ได้ผลเฉพาะกับฉันเมื่อฉันแก้ไขสีพื้นหลังที่ชัดเจนสำหรับแต่ละเซลล์และสีที่ชัดเจนสำหรับตารางเอง .. ทั้งโปรแกรม

ในการกำหนดสีที่ชัดเจนสำหรับโต๊ะ:

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

เพื่อกำหนดสีสำหรับเซลล์:

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

3

สิ่งหนึ่งที่ดี สีเริ่มต้นของ UITable ดูเหมือนจะเป็นสีขาว (ฉันไม่รู้ว่าทำไม)

พื้นหลังสีขาว

แต่เปลี่ยนที่ดีกว่า


สมบูรณ์แบบ! นั่นคือความสงบที่ขาดหายไป ไม่จำเป็นต้องมีบรรทัดรหัสเพิ่มเติม!
Morpheus78


3

สร้าง IB Outlet สำหรับมุมมองตาราง @IBOutlet อ่อนแอ var yourTable: UITableView!

ในการดูโหลด

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

    yourTable.backgroundColor = UIColor.clearColor()
}

หากคุณต้องการล้างสีของเซลล์ให้ทำเช่นนี้ด้วย

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

    cell.backgroundColor = UIColor.clearColor() 

}


2

ลอง

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

และ

cell.backgroundColor = [UIColor clearColor];

2

ในกรณีของฉันเซลล์ถูกสร้างขึ้นโดยใช้ xib ดูเหมือนว่าตัวสร้างอินเทอร์เฟซบน xcode5 มีปัญหาในการตั้งค่า clearColor ให้กับ cell.backgroundColor

สิ่งที่ฉันต้องทำคือการตั้งค่า

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

การควบคุมสิ้นสุดลงของฟังก์ชันที่ไม่เป็นโมฆะ
ropo





0

อย่างรวดเร็ว 3

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
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.