2012-04-08 5 views
1

Meine App verfügt über eine gruppierte Tabellenansicht, und die Zellen verwenden Leinen als Hintergrund ohne Trennzeichen. Das Leinenmuster wiederholt sich perfekt, wenn 150x150 gekachelt wird, aber wenn Zelle 0 100 Pixel hoch ist, da das Muster wieder bei Pixel 0 in Zelle 1 beginnt, wird es bemerkbar, da die Linien in der Wäsche nicht übereinstimmen würden. Die Wäsche endet dort, wo die Tischansicht endet, und so muss auch mit ihr gescrollt werden.Hintergrund mit Kacheln für UITableViewCells, deren Höhe nicht im Voraus bekannt ist

Irgendwelche Ideen, wie ich dies anmutig arbeiten kann?

+0

Haben Sie eine 24bit/32bit PNG-Datei als Leinenbild verwendet? –

+1

Weiß nicht, was es ist, aber ja, es ist eine PNG-Datei. – Andrew

+0

Ich fragte, weil ich einen ähnlichen Fehler zuvor erlebt habe. Wenn Sie 8bit PNGs verwenden, wird das Bild manchmal wie 1 Pixel verschoben. –

Antwort

2

Wenn Sie UIColor verwenden, um Ihren Musterhintergrund festzulegen, müssen Sie wahrscheinlich auf eine UIImageView setzen. Stellen Sie die frame entsprechend ein, aber passen Sie den Ursprung der bounds an, um den inneren Inhalt zu scrollen.

Also die Zelle in Zeile 0 wird Grenzen mit origin.y = 0 haben. Die Zelle in Zeile n hat Grenzen mit origin.y = (n * [your cell height])%[your source texture height]. Um Wraparound zu behandeln (wenn Ihre Zelle zum Beispiel die letzte Zeile Ihres Quellmusters am oberen Rand enthalten sollte, dann rollen Sie zurück in die erste Zeile), möchten Sie wahrscheinlich ein modifiziertes Texturbild erstellen, das [cell height] + [source texture height] - 1 Pixel groß ist Der erste Teil der Textur wiederholt sich am unteren Rand.

+0

Die Zellenhöhen ändern sich jedoch. Es gibt keine Möglichkeit, im Voraus zu wissen, wie groß sie sein werden. Ich kann also keiner anderen Zelle sagen, dass sie das Image an diesem Punkt starten soll, weil sie nicht wissen kann, was dieser Punkt sein würde, ohne Code, um jede Zelle vorher zu fragen, wie groß sie ist, was wann kommt auf Zelle 100 kann eine Weile dauern. – Andrew

+0

Eigentlich kannst du; In Ihrer Unterklasse von 'UITableViewCell' implementieren Sie einfach einen neuen' setFrame: ', der' source.y' verwendet, um die Grenzen des Hintergrundbildes festzulegen. Tabellenansichten sind Unterelemente der Bildlaufansicht, die die Zellen in ihnen manuell verwalten, sie jedoch immer noch explizit in einem großen, kontinuierlichen Bildlaufbereich platzieren. – Tommy

Verwandte Themen