Ошибка отображения UISearchBar: слишком левый текст, перекрывающий значок увеличительного стекла - PullRequest
5 голосов
/ 03 апреля 2011

Я столкнулся с самой странной ошибкой отображения моего 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 with display bug

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

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

1 Ответ

19 голосов
/ 22 июля 2011

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

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

...