UISearchBar представлены UISearchController в таблице вид заголовка оживляет слишком далеко, когда активный



Я использую UISearchController, чтобы представить строку поиска в представлении заголовка tableview:



...
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.presentingTVC.tableView.tableHeaderView = self.searchController.searchBar;
[self.searchController.searchBar sizeToFit];
self.presentingTVC.tableView.tableHeaderView = self.searchController.searchBar;


(где установка свойства tableHeaderView дважды необходима, так как в противном случае представление заголовка перекрывает первую строку, т. е. пару ответов на S. O. )



вот как это выглядит, идеально в положении, когда он неактивен:
Inactive search bar in correct position



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



Screenshot showing search bar animated too far down



здесь
видео странной анимации панели поиска



Если я просто использую строку поиска отдельно от UISearchController, она не показывает такое же поведение, когда она становится активной.



в моем представлении контроллер вида, у меня есть self.definesPresentationContext = YES; и self.navigationController.navigationBar.translucent = YES;, и в IB ни один из ящиков "extend Edge" не активен (все, казалось бы, возможно вещи, которые могут отбросить презентацию поиска, от чтения вокруг).



кто-нибудь знает, как я могу остановить панель поиска от анимации вниз?

695   14  

14 ответов:

хорошо, так что я, наконец, понял решение для себя. Хотя, скорее всего, у нас есть другие вещи в нашем коде / раскадровке (вот почему на этот вопрос трудно ответить), по большей части я следовал учебнику Apple по UISearchController: (https://developer.apple.com/library/ios/samplecode/TableSearch_UISearchController/Introduction/Intro.html)

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

но была одна последняя проблема, которая заключалась в том, что первая строка представления таблицы результатов была скрыта панелью поиска. Чтобы исправить это, я добавил self.tableView.contentInset = UIEdgeInsetsMake(kHeightOfTableViewCells, 0, 0, 0); до viewDidLoad метод моего представления таблицы результатов. Вуаля!

старый вопрос, но я смог решить эту проблему, установив

self.extendedLayoutIncludesOpaqueBars = YES;

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

я смог предотвратить UISearchBar от смещения вниз, удалив следующую строку из моего ViewController: self.definesPresentationContext = YES;

definesPresentationContext = true

override func viewDidLoad() {
        super.viewDidLoad()

        searchController = UISearchController(searchResultsController: nil)
        searchController.searchResultsUpdater = self
        searchController.hidesNavigationBarDuringPresentation = false

        searchController.dimsBackgroundDuringPresentation = true
        searchController.searchBar.searchBarStyle = UISearchBarStyle.Prominent
        self.tableView.tableHeaderView = searchController.searchBar

        definesPresentationContext = true

моя очередь. У меня также была эта проблема, когда я следовал примеру кода WWDC.

Я заметил, что если я не установил свойство scopeButtonTitles панели поиска, панель поиска не будет видна. При ближайшем рассмотрении у него просто была рамка CGRectZero. Это означает, что установка scopebuttontles устанавливает кадр за кулисами. Поэтому, если вы не хотите показывать какие-либо названия scopebuttontles, но все же не хотите жестко кодировать UISearchBar на определенную высоту, установите scopeButtonTitles к пустому массиву.

self.searchController = UISearchController(searchResultsController: nil)
self.searchController.searchResultsUpdater = self
self.searchController.searchBar.scopeButtonTitles = []
self.tableView.tableHeaderView = self.searchController.searchBar

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

реквизит для команды QA Apple (применимо к iOS 8)

я столкнулся с этой проблемой совсем недавно, и ни одно из решений не сработало для меня. Возможно, потому, что мой пользовательский интерфейс более сложен (мое табличное представление с поддержкой поиска в содержимом UITabController внутри UiNavigationController) в любом случае, ни один из вышеперечисленных рабочих. Я мог бы просто решить свою проблему с помощью этого очень аккуратного фрагмента кода, который я нашел в: UISearchController не Redisplaying панель навигации на поворот

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
{
    if (bar == searchController.searchBar) {
        return UIBarPositionTopAttached;
    }
    else { // Handle other cases
        return UIBarPositionAny;
    }
}

еще одна вещь, чтобы добавить: после установки все мои иерархия контроллера, чтобы расшириться под непрозрачными и верхними полосами, моя панель поиска начала появляться скрытой под панелью навигации и появилась бы сразу после поворота. это было сигналом для меня, что есть какая-то ошибка выкладки, и некоторая информация о моем макете была неправильной. этот метод делегирования помогает моему контроллеру понять ситуацию в строке поиска в противном случае nomad!

нашли его! Это, кажется, наступательная линия в viewDidLoad из представленных ВК:

self.edgesForExtendedLayout = UIRectEdgeNone;

удалил это, и панель поиска осталась на месте, как и было предсказано.

снимите флажок Настроить Вставки Прокрутки

и

проверка Под Верхней Панели

основные моя проблемаenter image description here

для iOS 11 & swift 4, Установите строку ниже в viewController решена моя проблема (панель поиска прыгать вниз):

self.edgesForExtendedLayout = .bottom

Я думаю, вы установили UISearchBar frame.original.y = 64

есть код

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) {
    [self setEdgesForExtendedLayout:UIRectEdgeNone];
}

searchBar.frame = CGRectMake(0, 0, 376, 44);

мойки может помочь вам

в моем случае, установив навигационную панель в self.navigationController.navigationBar.translucent = NO; Исправлена проблема. Похоже, что уровень представления панели поиска не учитывает прозрачность навигационной панели при размещении панели поиска.

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

Как уже упоминалось в первом посте все нужно другое решение. Так вот мой. Я должен был объединить две вещи, упомянутые на этой странице, а именно:

Swift 2:

    navigationController?.navigationBar.translucent = true

    edgesForExtendedLayout = .None

его очень просто просто сделать clipsToBounds = true заголовка представления таблицы в строке поиска ведьмы добавляется.

countryTableView.tableHeaderView?.clipsToBounds = true

Если вы используете UINavigationController и TabBar вы не могу использование:

self.extendedLayoutIncludesOpaqueBars = true

вам понадобится это решение:https://stackoverflow.com/a/46151063/3369381

Comments

    Ничего не найдено.