2016-07-21 9 views
0

Ich entwickle eine App, die iOS 8.0+ mit Swift 2.2 anvisiert. Ich habe eine UICollectionView, die eine unterschiedliche Anzahl von Spalten abhängig von der Ausrichtung des Geräts anzeigt. In viewWillTransitionToSize benutze ich indexPathsForVisibleItems() und finde den kleinsten Indexpfad, um das erste sichtbare Objekt zu bestimmen und zu diesem Element bei einer Orientierungsänderung zu blättern.Abrufen von indexPathsForVisibleItems() ohne die unter einer transparenten Navigationsleiste

Dies funktioniert gut, außer dass indexPathsForVisibleItems() Elemente enthält, die unter der transluzenten Navigationsleiste sind, so dass das Scrollen durch einige Zellen ausgeschaltet sein kann. Gibt es eine Möglichkeit zu wissen, welche Zellen sichtbar sind und nicht unter der Navigationsleiste?

+0

Sie konnten feststellen, wie groß die Navigationsleiste ist und die Zelle an diesem CGPoint in der UICollectionView abrufen. Dann können Sie diese Zelle nach oben scrollen. – Putz1103

+0

@ Putz1103 Ah, danke, ich vermisse 'indexPathForItemAtPoint'. Willst du eine Antwort schreiben? –

Antwort

1

Wenn Sie bei einer Rotation zu einer bestimmten Zelle blättern möchten, können Sie den physischen Standort dieser Zelle auf dem Bildschirm ermitteln (die Höhe Ihrer transluzenten Navigationsleiste und die y-Koordinate der Zelle wählen) und indexPathForItemAtPoint aufrufen. Dadurch erhalten Sie die erste Zelle, die tatsächlich sichtbar ist (nicht unter der Überlagerung). Dann können Sie die UICollectionView anweisen, zu dieser Zelle bei Rotation zu scrollen.

Verwandte Themen