2017-09-27 34 views
7

Od czasu aktualizacji nowego systemu iOS 11 mam aplikację, która pokaże puste wiersze widoku tabeli na symulatorze i urządzeniu. Nawet separatory rzędów nie będą wyświetlane dla żadnego z wierszy, które powinny tam być. Jeśli zmienię symulator na starszą wersję systemu iOS, wiersze będą wyświetlane poprawnie. Brak zmian w kodzie ani w scenorysie.Xcode 9 - iOS 11 Wiersze UITableView są puste

Wiersze nadal zawierają dane, co oznacza, że ​​mogę dotknąć jednego z pustych wierszy, a następnie wykona kod i zawiera informacje, których się spodziewałem.

Wygląda na to, że inne sceny, które mam, gdy widok tabeli jest umieszczony w widoku i nie używam wbudowanej etykiety tekstowej, działają poprawnie. Tylko ta klasa widoku tabeli za pomocą wbudowanej etykiety tekstowej.

Oto mój kod dla klasy Tableview ...

@interface BunkPickTableViewController() 

@end 

@implementation BunkPickTableViewController 

@synthesize appDelegate, delegate, bunkPassedValue; 

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    UIView *backgroundView = [[UIView alloc] initWithFrame:self.view.bounds]; 

    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    CAGradientLayer *bgLayer = [BackgroundLayer tanGradient]; 
    bgLayer.frame = self.view.bounds; 
    [self.view.layer insertSublayer:bgLayer atIndex:0]; 

    self.tableView.backgroundView = backgroundView; 

    [self.navigationController.navigationBar setTintColor:[UIColor blackColor]]; 

    self.title = @"Bunk Codes"; 

} 

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    [[self navigationController] setNavigationBarHidden:NO animated:NO]; 

    [self.tableView reloadData]; 

} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [appDelegate.bunkArray count]; 
} 

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 

     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

     cell.textLabel.textAlignment = NSTextAlignmentCenter; 

     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

     cell.backgroundColor = [UIColor clearColor]; 

    } 

    Bunk *bunkObj = [appDelegate.bunkArray objectAtIndex:indexPath.row]; 

    cell.textLabel.text = bunkObj.bunkId; 

    return cell; 

} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 

    [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    Bunk *bunkObj = [appDelegate.bunkArray objectAtIndex:indexPath.row]; 

    [delegate dismissBunkPop:bunkObj.bunkId]; 

    [self.navigationController popViewControllerAnimated:YES]; 

} 

@end 

TableView Settings Image

+0

Kiedy przejdziesz przez kod, czy 'cell.textLabel.text' uzyska poprawną wartość? – Koen

+0

To działa, a ja zepsułem i sprawdziłem, czy poprawna liczba wierszy pobiera prawidłowe informacje. Wszystko wygląda dobrze. – Kryckter

+1

Mam podobny problem w projekcie, który doskonale działa na ios10 (wszystkie komórki są teraz puste. Tylko tytuły grupowe są normalne). Patrzę na to. – ZDidier

Odpowiedz

3

miałem ten problem, a także z IOS 11 pokazując puste komórki .. ale w IOS 10 było w porządku. Mój problem polegał na tym, że używałem gradientu, który z jakiegoś powodu powstrzymał wyświetlanie tekstu komórki. Usunięcie gradientu rozwiązało puste komórki.

+0

To tak naprawdę nie odpowiada na pytanie. Jeśli masz inne pytanie, możesz je zadać, klikając [Zadaj pytanie] (https://stackoverflow.com/questions/ask). Możesz również [dodać nagrodę] (https://stackoverflow.com/help/privileges/set-bounties), aby zwrócić więcej uwagi na to pytanie, gdy już masz wystarczającą [reputację] (https://stackoverflow.com/help/ whats-reputation). - [Z recenzji] (/ recenzja/niskiej jakości-posts/17595014) –

3

Jest to prawdopodobnie spowodowane tym, że twój tableView dostaje się pod bgLayer.

Problem wydaje się być w self.view.layer insertSublayer:bgLayer atIndex:0. Używałem insertSubview w indeksie 0 i miałem ten sam problem. Jest to prawdopodobnie błąd w iOS 11 - jeśli Twój tableView jest zdefiniowany w storyboardie, zawsze jest popychany do tyłu.

Najlepszym rozwiązaniem jest umieszczenie bgLayer wewnątrz tableView.backgroundView.

UWAGA: Można również rozwiązać poprzez wywołanie sendSubviewToBack na bgLayer w viewDidAppear, ale unfortunetaly komórki Tableview poruszają się do tyłu na każdym Tableview reloaddata, więc nie jest to dobre rozwiązanie.

+0

Dobra robota. Dzięki: usunąłem moje backgroundView [self.tableView insertSubview: backgroundView atIndex: 0]; I działa zgodnie z oczekiwaniami – ZDidier

0
CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = self.tableView.bounds; 
gradient.colors = @[(id)[UIColor blackColor].CGColor, (id)[UIColor 
        grayColor].CGColor, (id)[UIColor 
        lightGrayColor].CGColor]; 

UIView *bgView = [[UIView alloc] 
          initWithFrame:self.tableView.bounds]; 
[self setBackgroundView:bgView]; 
[bgView.layer insertSublayer:gradient atIndex:0]; 

[self.tableView setBackgroundView:bgView]; 

Ustawienie warstwy gradientu dla widoku w tle tabeli rozwiązało problem dla mnie. W systemie iOS 10 możemy bezpośrednio wstawić podwarstwy do tableView, ale w systemie iOS 11 należy wstawić tylko do widoku tła UITableVIew.

0

W połączeniu ze wspomnianą powyżej obsługą widoków tableview ten problem może również wystąpić, jeśli projekt istniał przed Xcode 9, a następnie zaznaczono opcję Użyj przewodników układu bezpiecznego obszaru w scenorysie. Spróbuj odznaczyć i sprawdź, czy działa.

Powiązane problemy