Squeak.ru - шаблоны программирования

Блокировка UISearchBar в верхней части UITableView

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

Я нашел здесь хороший ответ - Блокировка UISearchBar в верхней части UITableView, например Game Center, но это не работает на iOS 6 - манипуляции с фреймом заголовка табличного представления не работают

Что может быть причиной этого?


Ответы:


1

Я нашел решение, которое работает на iOS 6 и ниже.

Создайте подкласс UITableView и переопределите метод layoutSubviews

- (void)layoutSubviews
{
    [super layoutSubviews];
    CGRect rect = self.tableHeaderView.frame;
    rect.origin.y = MIN(0, self.contentOffset.y);
    self.tableHeaderView.frame = rect;
}
01.11.2012
  • Большое спасибо! замена полосы в scrollViewDidScroll не сработала, но это помогло :) 22.01.2014

  • 2

    Если вы используете следующее:

    [_tableView setTableHeaderView:_searchBar];
    

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

    Не видя вашего кода, я могу только предположить, что, возможно, вы добавили UISearchBar в качестве заголовка раздела, а не заголовка таблицы?

    01.11.2012
  • Спасибо, но это не совсем то, что я ищу. Я также использую метод setTableHeaderView, но я хочу немного изменить поведение TableHeaderView (и я сделал это в iOS 5.x) - он должен прокручиваться со всем содержимым таблицы (это поведение по умолчанию), как вы сказали, но должен оставаться сверху если вы прокручиваете выше границ. i.stack.imgur.com/w2sVr.jpg — эта картинка лучше объясняет (я хочу такой же как в Game Center) 01.11.2012

  • 3

    Это потому, что iOS6 sdk не обновляется при прокрутке, может быть, такая же оптимизация. поэтому нужно вызывать tableview layoutSubviews при прокрутке.

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView 
    {
        UISearchBar *searchBar = searchDisplayController.searchBar;
        CGRect rect = searchBar.frame;
        rect.origin.y = MIN(0, scrollView.contentOffset.y);
        [scrollView layoutSubviews];
        searchBar.frame = rect;
    }
    
    06.11.2012
  • У меня такая же проблема. Я использовал аналогичный код (без layoutSubviews) в iOS5, который работал нормально, но не в iOS6. Добавление кода layoutSubviews устранило проблему. 30.11.2012
  • Кажется, что это приводит к тому, что панель поиска теряет событие касания. Вместо этого вызывается скрытая ячейка таблицы. Кто-нибудь это видит? 08.05.2013
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...