Я хочу, чтобы моя панель поиска рисовала свой фон вверх под строкой состояния следующим образом:
Это соответствующий код для изображения выше:
- (void)viewDidLoad
{
[super viewDidLoad];
self.searchBar = [[UISearchBar alloc] init];
self.searchBar.delegate = self;
[self.view addSubview:self.searchBar];
self.searchBar.translatesAutoresizingMaskIntoConstraints = NO;
NSDictionary *views = @{@"v":self.searchBar,
@"topLayoutGuide":self.topLayoutGuide};
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topLayoutGuide][v]" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[v]|" options:0 metrics:nil views:views]];
[self.searchBar setBackgroundImage:[UIImage imageNamed:@"searchbarBG"] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsDefault];
}
- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
return UIBarPositionTopAttached;
}
Проблема возникает, когда я добавляю строку поиска к UISearchDisplayController
, добавляя следующую строку в конце метода viewDidLoad
:
self.mySearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
В результате я получаю:
Обратите внимание, что изображение выглядит обрезанным. Это отличается от того, на что похоже, если я изменил UIBarPositionTopAttached на UIBarPositionTop в коде:
Обрезанное изображение заставило меня думать о clipsToBounds
, и я мог бы заставить панель поиска правильно отображать, добавив этот фрагмент кода в конец viewDidLoad
:
for (UIView *subview in self.searchBar.subviews) {
subview.clipsToBounds = NO;
}
Итак, я думаю, что UISearchDisplayController
возится с свойством clipsToBounds
фонового представления UISearchBar
. Кто-нибудь еще боролся с этим? Есть ли проблема с моим кодом?
Обновление:
В октябре 2013 года, помимо публикации этого вопроса, я также сообщил об этом с помощью инструмента Apple Bug Reporter. 6 января 2015 года (waaaay слишком поздно) я получил ответ от Apple Developer Relations:
Нет никаких планов по устранению этого, основываясь на следующем:
UISearchDisplayController больше не поддерживается. Желаемый функциональность должна быть доступна с помощью UISearchController, а если нет (или ведет себя некорректно), пожалуйста, напишите новую ошибку.
Мы закрываем этот отчет.
Если у вас есть вопросы о разрешении или если это все еще критическая проблема для вас, то, пожалуйста, обновите свой отчет об ошибке информация.
Пожалуйста, регулярно проверяйте новые выпуски Apple для любых обновлений что может повлиять на эту проблему.