UISearchBar в UINavigationBar променя ширината при завъртане на ориентацията

Това ме подлудява. Създавам приложение за разделен изглед на iPad.

Създадох лента за търсене вътре в UINavigationBar - нещо подобно...

UISearchBar *searchBar = [[UISearchBar alloc] initWitFrame:CGRectZero];
[searchBar setPlaceHolder:@"Search"];
[searchBar sizeToFit];
[searchBar setDelegate:self];
[self.navigatioItem setTitleView:searchBar];

това работи добре за мен, показвайки UISearchBar по този начин...

въведете описание на изображението тук

Също така имам този UIBarButtonItem, настроен да показва главния контролер за навигация в страничния прозорец.

Проблемът възниква, когато устройството се завърти в хоризонтална ориентация и UIBarButtonItem се скрие. Тогава лентата за търсене се появява така...

въведете описание на изображението тук

има малко пространство отстрани, което изглежда е там, тъй като barButtonItem е скрит и размерът на лентата за търсене не може да бъде актуализиран.

Освен това, когато завъртя устройството отново, ето какво се случва с UISearchBar

въведете описание на изображението тук

Как мога да актуализирам размера на лентата за търсене, след като бъде добавена към UINavigationBar. Дори използването на autoResizingMask не работи.

searchBar.autoResizingMask =UIViewAutoresizingFlexibleWidth;

Какво правя грешно тук?


person vikmalhotra    schedule 16.05.2012    source източник


Отговори (1)


Имах почти същия проблем (не беше лента за търсене, а някакъв UIView) и ето как го реших:

Опитайте да го създадете с фиксиран размер, който няма да се променя. Искам да кажа, че ако минималният размер на лентата ви за навигация е (например) 320pt, а barbutton е около 30pt и имате нужда лентата за търсене да бъде поставена точно в средата (което, BTW не е стандартно, AFAIK), ще трябва да го направите 320 - (30+10)*2 = 240pt. Лентата за търсене ще бъде поставена точно в средата и ще има достатъчно свободно място.

По този начин нито ще промени размера си, нито ще засегне други елементи.

Или бих ви предложил да го поставите на правилното място, а не в средата.

Дано помогна.

person Protheus    schedule 19.06.2012