2015-07-08 2 views
1

У меня есть пользовательский tableView, но способ его создания делает нижнюю и верхнюю части уродливыми, когда видна только половина ячейки. Смотрите рисунок для справки:Показать только полностью видимый UITableViewCells

tableView

Я хочу нижнюю часть (и верх после crolling) видна только когда вы можете увидеть 100% клетки.

Я попытался это проверить, если были полностью видны клетки, но я считаю, cellForRowAtIndexPath создает reusableCells, когда она частично видна и не вызывается снова, когда она полностью прозрачна:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    var myCell:ChooseStoryCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ChooseStoryCell 

    var cellRect = self.tableView.rectForRowAtIndexPath(indexPath) 
    var completelyVisible = CGRectContainsRect(self.tableView.bounds, cellRect) 

    if completelyVisible == true { 
     myCell.hidden = false 
     myCell.backgroundColor = Color.sharedColors().colorsArray[5] 
     myCell.storyLabel.text = stories[indexPath.row].name 
     myCell.circleView.layer.cornerRadius = 15 
    } 
    else{ 
     myCell.hidden = true 
    } 

Как бы я идти вперед с этим? Любая помощь будет очень полезна!

+0

Попробуйте правильно отрегулировать высоту ячеек на еле на экране – Shailesh

+0

Не имеет значения, когда я прокручиваю в любом случае. В любой момент времени я не хочу видеть камеру, которая только частично видима. Поэтому края таблицыView выглядят слишком резкими. –

ответ

1

Поместите свой стол в родительский UIView. Поля от верхней части таблицы до верхней части родительского представления должны быть равны той, какая высота ваших ячеек, то же самое снизу, ширина представления таблицы должна быть такой же, как вид ее родителя, левое и правое поля равны нулю. Таким образом, для отображения ячейки есть только дополнительное пространство сверху/снизу.

На съемках с круглыми записямиToBounds NO, с родительского представления убедитесь, что для клиповToBounds установлено значение YES.

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

В качестве альтернативы вы также можете просто уменьшить высоту вашего стола, переместить его и установить для клипов значение «Нет». Он должен это делать. Но я предпочитаю встраивать в View, чтобы быть уверенным, что ничего не будет отображаться снаружи.

+0

Это сработало! :) Вы случайно не знаете, как я мог бы оживить появление ячеек, которые появляются? Это очень быстро. –

+0

Использование - (void) scrollViewDidScroll: (UIScrollView *) метод scrollView (обязательно настройте делегат табличного представления). В этом представлении возьмите массив visibleCells. Возьмите первую и последнюю ячейки, и вы измените настройки альфа в соответствии с формулой, которая отобразит Alpha в относительное положение ячейки. – Ganzolo

+0

Хорошо, спасибо большое! Назначьте это. –

1

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

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var myCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell 

     var cellRect = tableView.rectForRowAtIndexPath(indexPath) 
     var completelyVisible = cellRect.rectByIntersecting(tableView.bounds) == cellRect 

     if completelyVisible == true { 
      myCell.contentView.hidden = false 
     } 
     else{ 
      myCell.contentView.hidden = true 
     } 

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