2015-06-24 2 views
3

Я пытаюсь создать пользовательский UITableView, который действует аналогично приложению напоминаний.Место UITableViewCell под братьями и сестрами

Вместо того, чтобы прокручивать верхнюю часть видимой ячейки, я хочу, чтобы она была закрыта следующей ячейкой, чтобы ячейки отображались друг на друга при прокрутке.

В настоящее время я использую:

override func scrollViewDidScroll(scrollView: UIScrollView) { 

    let topIndexPath: NSIndexPath = tableView.indexPathsForVisibleRows()?.first as! NSIndexPath 

    let topCell = tableView.cellForRowAtIndexPath(topIndexPath) 

    let frame = topCell!.frame 

    topCell!.frame = CGRectMake(frame.origin.x, scrollView.contentOffset.y, frame.size.width, frame.size.height) 
} 

Но верхняя ячейка всегда выше второй ячейки - в результате чего вторая ячейка для прокрутки под ним.

Также, если я быстро прокручу, это, похоже, приведет к потере всех моих ячеек.

EDIT: Исправить это. Ответ будет опубликован ниже для дальнейшего использования.

ответ

0

Для всех, кто ищет это в будущем. Просто проведите по всем видимым ячейкам и установите их положение z на их номер строки (так что каждая ячейка стекает над предыдущей).

Оператор if указывает верхней ячейке, чтобы она оставалась на содержимомОфисета прокрутки и для всех остальных ячеек предполагала их ожидаемую позицию. Это останавливает смещение других ячеек, если вы прокручиваете слишком быстро.

override func scrollViewDidScroll(scrollView: UIScrollView) { 

    // Grab visible index paths 
    let indexPaths: Array = tableView.indexPathsForVisibleRows()! 

    var i = 0 
    for path in indexPaths { 
    let cell = tableView.cellForRowAtIndexPath(path as! NSIndexPath) 
    // set zPosition to row value (for stacking) 
    cell?.layer.zPosition = CGFloat(path.row) 

    // Check if top cell (first in indexPaths) 
    if (i == 0) { 
     let frame = cell!.frame 

     // keep top cell at the contentOffset of the scrollview (top of screen) 
     cell!.frame = CGRectMake(frame.origin.x, 
           scrollView.contentOffset.y, 
           frame.size.width, 
           frame.size.height) 
    } else { 
     // set cell's frame to expected value 
     cell!.frame = tableView.rectForRowAtIndexPath(path as! NSIndexPath) 
    } 
    i++ 
    } 

} 
Смежные вопросы