Грешка в дисплея на 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
Имах същия проблем с моето приложение. В предишната ми версия беше добре. Това обаче се случи наскоро. Все още търся решение. Между другото, моята лента за търсене е дефинирана в 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