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

Это сводит меня с ума. Я создаю приложение с разделенным экраном на iPad.

Я создал searchBar внутри 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, а кнопка панели около 30pt, и вам нужно, чтобы панель поиска располагалась прямо посередине (что, кстати, не является стандартным, AFAIK), вам нужно сделать ее 320 - (30+10)*2 = 240пт. Панель поиска будет размещена прямо посередине и останется достаточно свободного места.

Таким образом, он не изменит свой размер и не повлияет на другие элементы.

Или я бы посоветовал вам разместить его в правильном месте, а не посередине.

Надеюсь, это помогло.

person Protheus    schedule 19.06.2012