UITableView backgroundColor เสมอเป็นสีเทาบน iPad


128

เมื่อฉันตั้งค่าbackgroundColorสำหรับฉันUITableViewมันทำงานได้ดีบน iPhone (อุปกรณ์และเครื่องจำลอง) แต่ไม่ได้อยู่ในเครื่องจำลอง iPad แต่ฉันได้รับพื้นหลังสีเทาอ่อนสีใด ๆ groupTableViewBackgroundColorที่เราได้ตั้งไว้รวมทั้ง

ขั้นตอนในการทำซ้ำ:

  1. สร้างโครงการที่ใช้การนำทางใหม่
  2. เปิด RootViewController.xib และตั้งค่าลักษณะมุมมองตารางเป็น "จัดกลุ่ม"
  3. เพิ่มการตอบกลับนี้ไปที่ RootViewController:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. เลือก Simulator SDK 3.2 สร้างและเรียกใช้
  5. คุณจะได้รับพื้นหลังสีดำ (อุปกรณ์และเครื่องมือจำลอง)
  6. เลือกเป้าหมายของคุณในแผนผังโครงการ
  7. คลิกที่โครงการ: อัพเกรดเป้าหมายปัจจุบันสำหรับ iPad
  8. สร้างและเรียกใช้
  9. คุณจะได้รับพื้นหลังสีเทาอ่อน
  10. เปลี่ยนลักษณะมุมมองตารางกลับเป็นธรรมดาและคุณจะได้รับพื้นหลังสีดำ

ขอบคุณสำหรับความช่วยเหลือของคุณ!


2
อ่าตอนนี้ iPhone และ iPad อยู่ในแนวเดียวกันอีกครั้งที่นี่ใน iOS6 :-)
Gerd

3
ไชโยที่ใช้คำที่ไม่ค่อยใช้ "ขั้นตอนในการทำซ้ำ"! :-p
Constantino Tsarouhas

คำตอบ:


245

ลองอย่างใดอย่างหนึ่งเหล่านี้

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];

3
ฉันไม่รู้ว่ามีผลข้างเคียงหรือไม่ แต่ใช้งานได้! ขอบคุณ! self.tableView.backgroundView = ศูนย์;
rjobidon

30
สำคัญมาก: ใช้งานได้กับ SDK 3.2 เท่านั้น สำหรับความเข้ากันได้ย้อนหลังกับ 3.1.3 และก่อนหน้านี้คุณต้องตรวจสอบว่ามุมมองตารางตอบสนองต่อคุณสมบัติ backgroundView: ถ้า ([self.tableView responssToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; ไม่เช่นนั้นแอพของคุณจะขัดข้องและออกทันทีคุณสามารถเชื่อใจฉัน!
rjobidon

1
ใช่ฉันลองวิธีการแก้ปัญหาข้างต้นและได้ผลสำหรับฉัน ทุกคนสามารถบอกฉันได้ว่าปัญหานี้คืออะไรจริง ๆ ทำไมเมื่อเรารันแอพมันเป็นสีเทา
Naveen

โปรดบอกใครสักคนว่าทำไมต้องใช้สิ่งนี้เพื่อแก้ปัญหานี้
mask8

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

30

ขอบคุณมากสำหรับโซลูชันนี้ ฉันใช้สิ่งนี้กับคุณสมบัติ UITableView ด้วย IBOutlet ใน UIViewController และใช้งานได้ดีเช่น:

[panelTable setBackgroundView:nil];
[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
[panelTable setBackgroundColor:UIColor.clearColor]; // Make the table view transparent

ไม่จำเป็นต้องมีบรรทัดกลาง [panelTable setBackgroundView: [[[UIView alloc] init] autorelease]];
NIKHIL

4
การแช่แข็งไฟ: จริงๆแล้วมี หากไม่มีมันคุณจะได้รับสิ่งประดิษฐ์รูปวาดแปลก ๆ ในขอบเซลล์ตาราง
Hilton Campbell

6

บน iPad backgroundViewดูเหมือนว่าคุณสมบัติจะใช้ในการสร้างสีพื้นหลังสีเทาสำหรับตารางที่จัดกลุ่ม ดังนั้นสำหรับการเปลี่ยนสีพื้นหลังสำหรับตารางที่จัดกลุ่มบน iPad หนึ่งควรnilออกจากbackgroundViewคุณสมบัติและจากนั้นตั้งค่าbackgroundColorในมุมมองตารางที่ต้องการ

- (void)viewDidLoad
{
    [super viewDidLoad];

    // If you need to support iOS < 3.2, check for the availability of the
    // backgroundView property.
    if ([self.tableView respondsToSelector:@selector(setBackgroundView:)]) {
        self.tableView.backgroundView = nil;
    }
    self.tableView.backgroundColor = [UIColor whiteColor];
}

ใช่ควรเพิ่มการตรวจสอบนี้เพื่อสนับสนุน iOS ก่อนหน้านี้
karim

2

ฉันคิดว่ามันน่าสังเกตว่าตั้งแต่ Xcode 6.1 และ iOS 8.1 โดยเฉพาะสำหรับ iPad (ถ้าคุณต้องการตั้งค่าพื้นหลังของเซลล์ด้วย) ดูเหมือนว่าคุณจะต้องตั้งค่าพื้นหลังตารางและพื้นหลังของเซลล์

ตัวอย่างเช่นบนกระดานเรื่องราวของ iPhone คุณสามารถตั้งค่าเซลล์ให้เป็นสีที่ชัดเจนจากนั้นตั้งค่าภาพพื้นหลังของตารางโดยทางโปรแกรมสำหรับตารางโปร่งใสพร้อมภาพพื้นหลัง อย่างไรก็ตามหากคุณต้องดูการกำหนดค่าเดียวกันนี้บน iPad เซลล์จะไม่ชัดเจน เซลล์จะต้องมีการตั้งค่าให้ชัดเจนโดยทางโปรแกรมสำหรับ iPad


ฉันเห็นปัญหานี้สำหรับแอปที่สร้างด้วย Xcode 6.4 และทำงานบน iOS 9.2 ฉันตั้งค่าสีพื้นหลังของเซลล์มุมมองตาราง (คงที่) ให้ชัดเจนในตัวสร้างส่วนต่อประสานและพวกมันก็ปรากฏชัดเจนบน iPhone แต่บน iPad พวกมันเป็นสีขาวจนกว่าฉันจะตั้งค่าสีพื้นหลังของเซลล์ให้ชัดเจนใน-viewDidLoad:วิธีการของตัวควบคุมมุมมอง
เกร็ก

1

ลองตั้งค่า backgroundColor และดูสำหรับตารางไม่มีโชค (Xcode 5 iOS7.1 เครื่องจำลอง iPad) ดูดีสำหรับ iPhone แต่สีพื้นหลังสีเทาอ่อนบน iPad ...

การทำงานกับ backgroundColor สำหรับเซลล์นั้นได้แก้ไขสิ่งนี้สำหรับฉันใน iOS 7.1 4/2014

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier = @"ViewSomeTriggerCell";

        // get a cell or a recycled cell
        sictVCViewSomeTriggerCell *cellTrigger = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        // put a picture and a word in the cell (positions set in .xib)
        NSString * tname = [self.fetchedTriggersArray objectAtIndex:indexPath.row];
        cellTrigger.imageTrigger.image = [UIImage imageNamed:@"icon_appicon.png"];
        cellTrigger.labelName.text = tname;

        // set background color, defeats iPad wierdness
        // http://stackoverflow.com/questions/2688007/uitableview-backgroundcolor-always-gray-on-ipad

        // clearColor is what I wanted, and it worked, also tested with purpleColor
        cellTrigger.backgroundColor =[UIColor clearColor];
        return cellTrigger;

}


0

หากแอปพลิเคชันของคุณกำหนดเป้าหมายทั้ง iPhone และ iPad คุณสามารถทำได้เช่นนี้:

[myTableView setBackgroundColor:[UIColor clearColor]]; // this is for iPhone

if ([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone) {
    [myTableView setBackgroundView:nil];
    [myTableView setBackgroundView:[[UIView alloc] init]];
} // this is for iPad only

โปรดสังเกตว่าการจัดสรร TableView นั้นไม่มีการเปิดใช้ ARC อัตโนมัติ


0

หากคุณกำลังเพิ่ม UIViewController ไปยัง UIViewController อื่นคุณต้องตั้งค่าพื้นหลังของมุมมองเป็น clearColor นอกเหนือจาก UITableView ไม่เช่นนั้นคุณจะได้รับพื้นหลังสีขาวแทนที่จะเป็นสีเทาอ่อน

if ([myViewController.myTableView respondsToSelector:@selector(setBackgroundView:)]) {
    [myViewController.myTableView setBackgroundView:nil];
}
myViewController.myTableView.backgroundColor = [UIColor clearColor];
myViewController.view.backgroundColor = [UIColor clearColor];

0
  • การจำลอง iPad 2
  • ใช้ iOS 7.1 ถึง 8.3
  • สร้างจาก XCode 6.3

ไม่ได้ทำงานกับ UIViewController ของฉัน -> UITableView ที่ระบุโดยใช้ XIB เดี่ยว สิ่งที่ทำงานคือการย้ายการตั้งค่าทั้งหมดลงในกระดานเรื่องราวและการตั้งค่าสีพื้นหลังโดยใช้ตัวตรวจสอบ IB


0

ฉันก็มีปัญหาแบบนี้เช่นกัน UITableViewสีพื้นหลังจะถูกเสมอgroupTableViewBackgroundColorไม่ว่าสิ่งที่ผมตั้ง

อาการเป็นเหมือนปัญหานี้ - UITableView กำลังรีเซ็ตสีพื้นหลังก่อนที่จะปรากฏขึ้น

หลังจากที่ฉันตั้งค่าสีพื้นหลังในinitฟังก์ชั่นมันถูกต้อง ในviewDidLoadและviewWillAppearเวทีมันถูกต้อง อย่างไรก็ตามในviewDidAppearสีพื้นหลังจะถูกรีเซ็ตเป็นสีเริ่มต้น

คำตอบที่ยอมรับไม่สามารถใช้งานได้ในขณะนี้

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[UIView alloc] init]];

นี่คือทางออกของฉัน เพียงแค่ตั้งค่าสีพื้นหลัง tableView ในviewDidLoadฟังก์ชั่นมากกว่าหรือinitviewWillAppear

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.