Как разместить UISearchBar в UIBarButtonItem?

Я использую UISearchController в iOS 8, и когда я делаю его UISearchBar в заголовке моей таблицы, все в порядке. Однако теперь мне это нужно в левой кнопке панели UINavigationBar (это не может быть вид заголовка из-за вертикального центрирования, когда я увеличиваю панель навигации). Когда я оборачиваю UISearchBar в UIBarButtonItem, он больше, чем ширина экрана.

внеэкранная строка поиска

Я думаю, что это связано с моим контроллером представления, инициализированным из раскадровки с включенными классами размера, что означает, что мои кадры не установлены до viewDidLayoutSubviews. Однако у меня была такая же проблема с моим сегментированным элементом управления на панели инструментов, и я просто вызвал sizeToFit на панели инструментов в viewDidLayoutSubviews, и это исправило панель инструментов. Когда я делаю то же самое для панели поиска, она все еще частично выводится за пределы экрана. Apple делает это в некоторых своих приложениях для iPad, но как?

Примечание. Я могу взломать его, чтобы вывести все на экран, но мне нужно обернуть его в другом представлении, но тогда цвет отключается, и это кажется неправильным, и я думаю, что анимация отключена.


person Steve Moser    schedule 14.08.2015    source источник


Ответы (1)


Вам нужно создать UIBarButtonItem с UIBarButtonSystemItemFixedSpace с шириной -10, которая удалит отступы в 10 пикселей.

UIBarButtonItem *Spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[Spacer setWidth:-10];
UISearchBar *searchBar= [[UISearchBar alloc] initWithFrame:CGRectMake(0, 5, self.view.frame.size.width-10, 39)];
UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:Spacer,searchBarItem,nil];
person Jincy Sam    schedule 14.08.2015