Можно ли изменять заголовки разделов UITableView, когда они «плавающие»? - PullRequest
2 голосов
/ 28 июля 2011

На устройствах iOS заголовки разделов в UITableView имеют хорошее поведение, когда они придерживаются или «всплывают» в верхней части экрана при прокрутке раздела.Заголовки разделов в моем конкретном случае загружаются из других файлов XIB.

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

Спасибо!

Ответы [ 3 ]

2 голосов
/ 29 июля 2011

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

- (void) updateHeaderShadows {
    int i=0;
    int sectionHeight = 0;
    int totalHeight = 0;
    UIView * sectionHeader;
    while (i<[self numberOfSectionsInTableView:self.tableView]) {
        sectionHeight = [self.tableView rectForSection:i].size.height;
        sectionHeader = [self tableView:self.tableView viewForHeaderInSection:i];
        if ([sectionHeader respondsToSelector:@selector(shadow)]) {
             if (sectionHeader.frame.origin.y == totalHeight || sectionHeader.frame.origin.y == totalHeight + sectionHeight - sectionHeader.frame.size.height) {
                 [((ListHeader *) sectionHeader).shadow setHidden:YES];
             } else {
                 [((ListHeader *) sectionHeader).shadow setHidden:NO];
             }
        }
        totalHeight += sectionHeight;
        i++;
    }
}
1 голос
/ 28 июля 2011

Я еще не проверял это, но я не вижу причин, почему это было бы невозможно. Просто убедитесь, что вы установили правильное значение bounds (потому что ваша тень должна быть сверху вашего обзора, а не над ним).

Вы можете использовать следующий подход:

  1. Используйте scrollView:didScroll:, чтобы получать уведомления о событиях прокрутки.
  2. В этом методе проверьте, нужно ли вам добавить теневое представление в ваше (плавающее) представление заголовка.
  3. Если это так, добавьте его. (просто [view addSubview:shadowView].) Что-то вроде CGRectMake(0.f, yourDefaultHeaderHeight, 320.f, yourShadowHeight) должно быть frame вашего shadowView.
  4. Теперь обновите bounds из view, чтобы он мог показать ваш shadowView: CGRectMake(0.f, 0.f - yourShadowHeight, 320.f, yourDefaultHeaderHeight + 2 * yourShadowHeight).
  5. Когда вы обнаружите, что ваш заголовок больше не плавает (с помощью scrollView:didScroll:), удалите теневое представление.

Ваше headerView с bounds должно быть 0.f - yourShadowHeight, потому что если вы используете просто 0.f, оно будет размытым (я не знаю почему ...).

0 голосов
/ 28 июля 2011

Вы должны иметь свой собственный UIView в шапке. Тогда вам понадобится ссылка на него. Затем подключитесь к scrollViewWillBeginDragging: с помощью вашего UIScrollViewDelegate. В этой функции добавьте тень к пользовательскому виду.

Вставьте scrollViewDidEndDragging:willDecelerate: и удалите тень в этой функции.

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