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

Я столкнулся с очень странной ошибкой отображения с моим UISearchBar.
Вот мой код, который отлично работает в другом приложении. (Я создаю панель поиска в коде, потому что файл xib невозможен.)

searchBar = [[UISearchBar alloc] initWithFrame:
    CGRectMake(0, 0, self.tableView.frame.size.width, 44)];
searchBar.delegate = self;
searchController = [[UISearchDisplayController alloc] 
                   initWithSearchBar:searchBar contentsController:self];
searchController.delegate = self;
searchController.searchResultsDataSource = self;
searchController.searchResultsDelegate = self;
self.tableView.tableHeaderView = searchBar;

Функциональность поиска и т. д. работает нормально. Но странно, строка поиска выглядит так, как на устройстве, так и на симуляторе:

UISearchBar с ошибкой отображения

  • Строка-заполнитель должна быть не там, а дальше вправо.
  • Когда я ввожу текст для поиска, он также начинается слишком далеко влево, и сквозь него виднеется значок увеличительного стекла.
  • Кроме того, установка searchBar.placeholder или searchBar.prompt на @"" или nil не удаляет этот заполнитель «Поиск». (Тем не менее,
    searchBar.placeholder = @"FooBar";
    будет отображать "FooBar", но все равно в неправильном месте.
  • Наконец, я нахожу странным, что строка «Поиск», хотя я установил другой язык (скажем, немецкий).

Любая помощь? Самая насущная проблема заключается в том, чтобы получить текст справа.


person Mundi    schedule 02.04.2011    source источник
comment
Я только что заметил, что заголовки указателей справа (вы можете видеть букву A и символ поиска на изображении) автоматически сдвигают правый край поля поиска влево. Возможно, он также смещает заполнитель/строку поиска на такое же расстояние (хотя и не должен)?   -  person Mundi    schedule 05.04.2011
comment
Удаление заголовков индекса не помогло.   -  person Mundi    schedule 05.04.2011
comment
У меня была такая же проблема с моим приложением. В моей предыдущей версии было нормально. Однако это произошло совсем недавно. Я все еще ищу решение. Кстати, мой searchBar определен в XIB.   -  person RoIT    schedule 19.04.2011


Ответы (1)


Такое поведение может быть вызвано переопределением (CGRect)editingRectForBounds:(CGRect)bounds или - (CGRect)textRectForBounds:(CGRect)bounds. Изменили ли вы что-либо из категории UITextField в другом месте вашего приложения? Целью этого могло быть добавление заполнения к текстовому полю (что вместо этого может быть выполнено с помощью невидимого leftView). В этом случае ваше пользовательское «заполнение» применяется к текстовому полю UISearchBar.

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

person ipaterson    schedule 21.07.2011
comment
Если я удалю это, это повлияет на весь проект. Возможно ли, что я установил для textRectForBounds значение «0» для определенного класса? или любое другое решение. - person jeet.chanchawat; 10.12.2015