2013-05-28 3 views
2

В простом UITableView с пользовательскими UIView's в разделе заголовков, есть способ расчета:Обнаружение Расстояние между UITableView заголовки разделов

  • Когда один из секции находится на верхней части, расстояние между этой секцией и следующий, который придет?

Я ожидаю, чтобы вычислить это здесь:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
+0

попробуйте numOfCellsInSection * высотаOfCell – Durgaprasad

+0

Что вы хотите сделать? перейдите к следующему разделу о каком-либо событии? – Durgaprasad

+0

Если разделы близки друг к другу (для заданного пространства, например, 10p), я хочу что-то сделать в заголовке верхнего раздела. – Peres

ответ

0

Я был в состоянии решить эту проблему, выполнив следующие действия:

  • Перед созданием заголовок раздела, проверьте, если у вас есть заголовок раздела для данный раздел. Если вы вернете его с NSMutableArray. Если не продолжать.
  • Когда вы создаете заголовок раздела, держите ссылку на него в NSMutableArray.

  • При прокрутке в:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

Выполните следующие действия:

// Get the toppest section 
NSUInteger sectionNumber = [[self.tableView indexPathForCell:[[self.tableView visibleCells] objectAtIndex: 0]] section]; 

// Get a reference to it 
SFBasicSectionHeader *topHeader = [arrayOfWeakHeaders objectAtIndex:sectionNumber]; 

SFBasicSectionHeader *bellowHeader; 
// Check if it's Ok to get the bellow header 
if (sectionNumber+1<[arrayOfWeakHeaders count] && [arrayOfWeakHeaders objectAtIndex:sectionNumber +1]) 
{ 
    bellowHeader = [arrayOfWeakHeaders objectAtIndex:sectionNumber+1]; 
} 

Разница между обоими будет:

CGFloat differenceBetweenTopAndBellowSection = bellowHeader.frame.origin.y - topHeader.frame.size.height - self.tableView.contentOffset.y; 

Выполнено.

2

Вы можете найти количество строк в этом разделе, вызвав метод tableView:numberOfRowsInSection: из протокола UITableViewDataSourceDelegate. Вы можете получить высоту для каждой строки в разделе с помощью метода tableView:heightForRowAtIndexPath: из протокола UITableViewDelegate. Добавьте высоту для всех строк, и вы получите нужное расстояние.

Ваш код будет выглядеть примерно так, если у вас есть ссылка на таблицу и раздел.

float totalHeight = 0; 

for (int i = 0; i < [tableViewDataSourceDelegate 
             tableView:tableView 
          numberOfRowsInSection:section]; i ++) { 
    totalHeight += [tableViewDelegate 
          tableView:tableView 
       heightForRowAtIndexPath:[NSIndexPath 
            indexPathForRow:i 
             inSection:section]]; 
} 

У меня не было возможности проверить этот код, но он должен работать [tm].

Редактировать

Это будет работать только если заголовок в верхней части.

+0

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

+0

Не работает. Заголовок раздела может отображать только 2 ячейки из 3, помните, что на простом «UITableView», в то время как в разделе есть ячейки, которые отображаются, он придерживается вершины ... – Peres

+0

Допустим, я не учитывал это. – Maarten

0

(предполагается, что все строки имеют одинаковую высоту)

NSIndexPath *topCellIndexPath = [tableView indexPathsForVisibleRows][0]; 
UITableViewCell *topCell = [tableView cellForRowAtIndexPath: topCellIndexPath]; 
CGFloat distanceToNextSection = [tableView convertRect: [topCell frame] fromView: topCell.superview].origin.y - tableView.contentOffset.y + ([self tableView: tableView numberOfRowsInSection: topCellIndexPath.section] - topCellIndexPath.row)*tableView.rowHeight 
+0

Это не работает. Но спасибо. – Peres

+0

У вас есть переменные высоты строк? Можете ли вы проверить возвращаемые значения для каждого выражения? – Mar0ux

+0

Nop, все тот же размер. – Peres

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