Nền UITableView Màu luôn luôn màu xám trên iPad


128

Khi tôi cài đặt backgroundColorcho UITableViewnó, nó hoạt động tốt trên iPhone (thiết bị và trình giả lập) nhưng KHÔNG trên trình giả lập iPad. Thay vào đó, tôi nhận được một nền màu xám nhạt cho bất kỳ màu nào tôi đặt bao gồm groupTableViewBackgroundColor.

Các bước để tái sản xuất:

  1. Tạo một dự án dựa trên điều hướng mới.
  2. Mở RootViewControll.xib và đặt kiểu xem bảng thành "Được nhóm".
  3. Thêm phần trả lời này vào RootViewControll:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. Chọn SDK SDK 3.2, xây dựng và chạy.
  5. Bạn sẽ nhận được một nền đen (thiết bị và giả lập).
  6. Chọn mục tiêu của bạn trong cây dự án.
  7. Nhấp vào Dự án: Nâng cấp mục tiêu hiện tại cho iPad.
  8. Xây dựng và chạy.
  9. Bạn sẽ có được một nền màu xám nhạt.
  10. Hoàn nguyên kiểu xem bảng thành Plain và bạn sẽ có nền đen.

Cảm ơn bạn đã giúp đỡ!


2
À, bây giờ iPhone và iPad được căn chỉnh lại ở đây trong iOS6 :-)
Gerd

3
Bravo vì đã sử dụng thuật ngữ hiếm khi được sử dụng "Các bước để tái sản xuất"! :-p
Constantino Tsarouhas

Câu trả lời:


245

Hãy thử một trong những thứ này.

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

3
Tôi không biết nếu có tác dụng phụ nhưng nó hoạt động! Cảm ơn! self.tableView.backgroundView = nil;
rjobidon

30
RẤT RẤT QUAN TRỌNG: Điều này chỉ hoạt động với SDK 3.2. Để tương thích ngược với 3.1.3. và trước đó, bạn phải kiểm tra xem chế độ xem bảng có phản hồi với thuộc tính backgroundView không: if ([self.tableView responssToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; nếu không ứng dụng của bạn sẽ bị sập và thoát đột ngột, bạn có thể tin tưởng tôi!
rjobidon

1
vâng, tôi đã thử giải pháp trên và nó hiệu quả với tôi. Bất cứ ai có thể cho tôi biết vấn đề này thực sự là gì. Tại sao khi chúng tôi chạy ứng dụng, nó có màu xám?
Naveen

Xin ai đó cho chúng tôi biết lý do tại sao điều này là cần thiết để giải quyết vấn đề này?
nạ8

bởi vì rõ ràng ios mới cho phép bạn đặt chế độ xem nền. Tại sao thiết lập của nó thành một số chế độ xem màu xám chỉ là một vấn đề mà Apple giới thiệu. rất kỳ quặc, rất ngu ngốc. Nhưng một lần nữa, mỗi ngày tôi lại gặp phải điều gì đó kỳ quặc và ngu ngốc khi mã hóa cho iOS
Bộ giải mã lười biếng

30

Cảm ơn rất nhiều cho giải pháp này. Tôi đã áp dụng điều này trên một thuộc tính UITableView với IBOutlet trong UIViewControll và nó hoạt động tốt như sau:

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

không có bất kỳ nhu cầu nào đối với dòng giữa [panelTable setBackgroundView: [[[UIView alloc] init] autorelease]];
NIKHIL

4
Freezing Fire: thực sự là có. Không có nó, bạn có được các tạo tác vẽ kỳ lạ trong đường viền ô bảng.
Hilton Campbell

6

Trên iPad, thuộc backgroundViewtính dường như được sử dụng để tạo màu nền xám cho các bảng được nhóm. Vì vậy, để thay đổi màu nền cho các bảng được nhóm trên iPad, bạn nên nilloại bỏ thuộc backgroundViewtính và sau đó đặt backgroundColorchế độ xem bảng mong muốn.

- (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];
}

Có, kiểm tra này nên được thêm vào để hỗ trợ các iOS trước đó.
karim

2

Tôi nghĩ rằng đáng chú ý là kể từ Xcode 6.1 và iOS 8.1, đặc biệt dành cho iPad (nếu bạn cũng muốn đặt nền ô), có vẻ như bạn phải đặt nền bảng VÀ nền ô.

Chẳng hạn, trên bảng phân cảnh iPhone, bạn có thể đặt một ô thành màu rõ ràng, sau đó đặt hình nền của bảng theo chương trình cho một bảng trong suốt có hình nền. Tuy nhiên, nếu bạn xem cùng cấu hình này trên iPad, các ô sẽ không rõ ràng. Các tế bào sẽ cần phải được thiết lập để xóa lập trình cho iPad.


Tôi đang gặp vấn đề này đối với các ứng dụng được xây dựng với Xcode 6.4 và chạy trên iOS 9.2. Tôi đặt màu nền của các ô xem bảng (tĩnh) của mình thành xóa trong Trình tạo giao diện và chúng xuất hiện rõ ràng trên iPhone, nhưng trên iPad chúng có màu trắng cho đến khi tôi đặt màu nền của các ô để xóa trong -viewDidLoad:phương thức của trình điều khiển chế độ xem của tôi .
Greg

1

đã thử cài đặt backgroundColor và View cho bảng, không gặp may (trình giả lập iPad Xcode 5 iOS7.1), có vẻ ổn cho iPhone, nhưng màu nền xám nhạt trên iPad ...

làm việc với backgroundColor cho chính tế bào đã sửa lỗi này cho tôi trên 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

Nếu ứng dụng của bạn nhắm mục tiêu cả iPhone và iPad, bạn có thể làm như thế này:

[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

Lưu ý rằng phân bổ TableView không có autorelease cho ARC.


0

Nếu bạn đang thêm một UIViewContoder vào một UIViewContoder khác, bạn cũng cần đặt nền của khung nhìn thành ClearColor ngoài UITableView nếu không bạn sẽ có được nền trắng thay vì xám nhạt.

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

0
  • Mô phỏng iPad 2
  • Chạy iOS 7.1 đến 8.3
  • Được xây dựng từ XCode 6.3

Không có cách nào ở trên hoạt động cho UIViewControll của tôi-> UITableView được chỉ định bằng một XIB duy nhất. Những gì đã làm là chuyển toàn bộ thiết lập vào Storyboard và thiết lập màu nền bằng trình kiểm tra IB.


0

Tôi cũng có loại vấn đề này. Các UITableViewmàu nền sẽ luôn luôn groupTableViewBackgroundColorkhông có vấn đề gì tôi đặt.

Triệu chứng giống như vấn đề này - UITableView đang đặt lại màu nền trước khi chế độ xem xuất hiện

Sau khi tôi đặt màu nền trong initchức năng, nó là chính xác. Trong viewDidLoadviewWillAppeargiai đoạn, nó là chính xác. Tuy nhiên, trong viewDidAppear, màu nền được đặt lại thành màu mặc định.

Câu trả lời được chấp nhận không hoạt động bây giờ.

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

Đây là giải pháp của tôi. Chỉ cần đặt màu nền của bảngView trong viewDidLoadchức năng chứ không phải inithoặc viewWillAppear.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
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.