2009-05-13 8 views
0

Ich zeige ein UITableView, und von Zeit zu Zeit erscheint die erste Zeile am unteren Rand der Ansicht.Offset bei der Anzeige eines UITableView

Es gibt nichts über der ersten Zeile und der leere Bereich ist nicht anfassbar.

Bisher habe ich überprüft:

  • headerView von Tableview: ist leer
  • Verwendung Ebene UITableViewCells
  • Kontrolle der rowHeight der Zellen
  • Kontrolle der Rahmen der Zellen
  • Wenn der Fehler auftritt, gibt es keine Speicherwarnung vor
  • Überprüfen Sie den ContentOffset der Tabelle Bildlaufansicht

Dieser Fehler erscheint nur auf dem iPhone, niemals auf dem Simulator.

Der Screenshot zeigt auf der linken Seite die korrekte Tabellenansicht und auf der rechten Seite die Ansicht mit dem Fehler. Während des Schnappschusses habe ich den Bildschirm berührt, sodass die Bildlaufleiste sichtbar ist.

Irgendeine Idee in welche Richtung ich schauen sollte?

Ich sah gerade die contentSize der TabelleView scrollView ist falsch: Ich habe 84 Zellen @ 67 Pixel und 1 Zelle @ 57 Pixel Höhe: insgesamt sollte 5685 aber ist 6005. (aus bei 320). Seltsam.

Stephan

alt text http://www.quicksnapper.com/files/5161/18374733084A0B3EA24D152.png

+0

Sie überprüft alles, was ich überprüft hätte, und es scheint nicht, dass Sie Abschnitte verwenden.Ich würde erneut nach Sections suchen und wenn Sie UITableViewCell ableiten, würde ich diesen Code erneut überprüfen. – Jordan

Antwort

0

So fand ich die Lösung für mein Problem:

ein NSLog Hinzufügen (@ ""). Das ist seltsam.

In meinem viewWillAppear, ich habe

if (searchByCuisinier || searchByResto) { 
    NSLog(@"Will set tableHeaderView"); 
    self.tableView.tableHeaderView = searchBar; 
    if (searchByCuisinier) { 
     searchBar.placeholder = @"Cuisinier"; 
    } else { 
     searchBar.placeholder = @"Restaurant"; 
    } 
    searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; 
    searchBar.autocorrectionType = UITextAutocorrectionTypeNo; 
    if ([filteredList count] == 0) 
     [searchBar becomeFirstResponder]; 
    } else { 
    self.tableView.tableHeaderView = nil; 
    NSLog(@""); // Magic! 
    } 

die NSLog Hinzufügen (@ "") löst den Fehler.

Umkehr auch den Test: Statt

if (searchByCuisinier || searchByResto) { 
.... 

ich tun:

if (!searchByCuisinier && !searchByResto) { 
.... 

Ich habe absolut keine Ahnung, warum das funktioniert (oder warum es funktioniert nicht ohne die NSLog).

1

Sie können die touchesBegan Methode des UITableView außer Kraft setzen dann einen Treffertest ausgeführt werden.

Dann fragen Sie die Ansicht zurückgegeben, welche Klasse es ist.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 

CGPoint location = [[touches anyObject] locationInView:self]; 

UIView *whatIsThis = [self hitTest:locationInView withEvent:event]; 

NSLog([[whatIsThis class] description]); 


} 

Zumindest haben Sie einen Ausgangspunkt. Du könntest auch fragen, wer sein SuperView ist.

+0

Es ist ein UITableView, und seine Superview ist View. –

+0

Jetzt wissen Sie, dass es sich nicht um eine Zelle handelt, und es ist nicht die Tabellenüberschrift oder Abschnittsüberschrift. Ich bin mir nicht sicher, ob das die Antworten sind, die Sie wollten, aber vielleicht können Sie den Fehler aufspüren –

Verwandte Themen