Ошибка отображения 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 with display bug

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

    Я хочу знать, что такое вызов по необходимости.

    Хотя я поискал в википедии и нашел это здесь: http://en.wikipedia.org/wiki / Evaluation_strategy , но не мог понять толком. Если кто-нибудь сможет объяснить на примере и указать на разницу с вызовом по значению, это будет большим подспорьем.

18
задан Will Ness 25 June 2019 в 16:50
поделиться