UITableView in UIViewController zeichnet erste Zelle nicht

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UITableView in UIViewController zeichnet erste Zelle nicht

    Ich hab hier ein ganz seltsames Problem. Und zwar erstelle ich eine Subklasse von UIViewController (NICHT UITableViewController!) und setze in der loadView dort rein oben einen statisch bleibenden view und darunter einen UITableView (Subklasse davon um genau zu sein). Das klappt alles, die Delegate-Methoden sind auch drin und es funktioniert wie ich will AUSSER dass, wenn ich KEINE section header anzeigen lasse, dann die erste UITableViewCell nicht gezeichnet wird. Dort bleibt einfach ein Strich blau. Tappe ich den leeren Platz, wird er blau und die App pusht den ViewController welcher auch gepusht werden sollte. Scrolle ich etwas runter und wieder rauf, dann erscheint die Zelle korrekt.

    Ich habe soweit alles überprüft, die cellForRowAtIndexPath: wird auch für die erste Zeile aufgerufen und returnt die cell, die willDisplayCell:forRowAtIndexPath: wird ebenfalls aufgerufen, setNeedsDisplay habe ich wo immer nötig eingebaut, lediglich die drawRect: der ersten Zelle wird nicht aufgerufen, die der folgenden hingegen schon.

    Hat irgendwer noch eine Idee, woran das liegen könnte, wieso die TableView denkt, sie müsse die erste Zelle nicht darstellen?
    Widgetschmie.de • Life is too short for gadgets
  • macmoonshine schrieb:

    Wenn Du setNeedsDisplay später aufrufst, wird dann die Zelle dargestellt?

    Das wird in der cellForRow... zweimal aufgerufen, weil dort label-text gesetzt wird. Hab gerade versucht dort eine performSelector...afterDelay aufzurufen, wird aufgerufen, bewirkt aber nichts. Interessant ist auch dass wenn ich setNeedsDisplay überschreibe und leer lasse, sich am Verhalten gar nichts ändert, sprich die anderen Zellen werden schön gezeichnet, die erste nicht.

    macmoonshine schrieb:

    Wird eine Zelle, die drawRect: nicht überschreibt, richtig dargestellt?

    Ich habe statt der Subklasse mal eine normale UITableViewCell zurückgeben lassen, und ja, die wird gezeichnet.

    macmoonshine schrieb:

    Was passiert, wenn Du UITableView und nicht Deine Unterklasse als Klasse für den TableView verwendest?

    Die einzige Methode, welche ich dort überschreibe, ist layoutSubviews, dort rufe ich aber die super-Implementation ganz zuerst auch auf. Wenn ich gleich danach returne ändert sich nichts am Problem. Die restlichen Methoden sind Ergänzungen.

    Irgendwas scheint da in der UITableViewCell-Subklasse nicht zu passen. Ich dachte daran dass die vielleicht denkt, sie sei gar nicht sichtbar, der Frame ist aber regulär und beginnt bei 0:0. Seltsam...

    Ha, gerade noch was rausgefunden: Wenn ich tableView.rowHeight auf alles ausser 44.f setze klappt es. Das ist ja sehr seltsam...
    Widgetschmie.de • Life is too short for gadgets
  • Ha, ich habs! Die UITableViewCells werden gleich im initWithStyle:reuseIdentifier: anscheinend mit 320x44 initialisiert. Dort initialisiere ich noch den contentView, in welchen ich zeichne, und den initialisiere ich mit CGRectZero da ich dachte die table view muss die Zellengrösse ja sowieso noch anpassen. Bei jedem setFrame auf die Zelle setze ich den contentView auf die Grösse der bounds, dort hatte ich aber ein if ! CGRectEqual drin.

    Darum hat es funktioniert, wenn Section-Headers angezeigt werden (auch die erste Zelle hat nicht mehr 0:0 als origin) und wenn ich die Höhe verändert habe (alles ausser 44).

    Wunderbar, danke macmoonshine, dank dir hab ich am richtigen Ort zu suchen begonnen. :)
    Widgetschmie.de • Life is too short for gadgets