изменить размер UISearchDisplayController затемненный черный наложение - PullRequest
7 голосов
/ 03 ноября 2011

Кто-нибудь знает, как чрезмерно изменить размер затемненного черного, когда вы нажали на строку поиска?

У меня возникли проблемы, когда я щелкнул, отменил просмотр таблицы, а затем будет анимирован, чтобы исчезнуть.

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

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
   tableView.frame =fTableView.frame;//CGRectMake(26, 100, 280, 310); //fTableView.frame;
    tableView.backgroundColor = [UIColor colorWithRed:243.0/255.0 green:236.0/255.0 blue:212.0/255.0 alpha:1];   
}

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

enter image description here

enter image description here

при нажатии кнопки отмены вид будет расходоваться обратно.enter image description here

Ответы [ 3 ]

10 голосов
/ 13 ноября 2013

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

1: переопределить класс UISearchDisplayController

@interface MySearchController : UISearchDisplayController

2: переопределить функцию setActive

- (void)setActive:(BOOL)visible animated:(BOOL)animated
{
[super setActive: visible animated: animated];

//move the dimming part down
for (UIView *subview in self.searchContentsController.view.subviews) {
    //NSLog(@"%@", NSStringFromClass([subview class]));
    if ([subview isKindOfClass:NSClassFromString(@"UISearchDisplayControllerContainerView")])
    {
        CGRect frame = subview.frame;
        frame.origin.y += 10;
        subview.frame = frame;
    }
}

}

3: изменить контроллер отображения поиска в xib / storyboard с UISearchDisplayController на MySearchController

1 голос
/ 16 января 2012

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

Что-то вроде: <yourSearchViewController>.view.frame =self.tableView.frame;

или если вы нене иметь его как переменную класса, в методе, который получает его в качестве аргумента, например:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
   controller.view.frame = self.tableView.frame;
    tableView.backgroundColor = [UIColor colorWithRed:243.0/255.0 green:236.0/255.0 blue:212.0/255.0 alpha:1];   
}

В качестве альтернативы вы можете захотеть создать его подкласс и переопределить его свойства представления локально.

Надеюсь, что этопомогает!

0 голосов
/ 19 марта 2012

UISearchDisplayController имеет свой собственный вид таблицы, который не так просто приручить. Я сталкивался с чем-то вроде этого и все еще ищу лучшее решение.

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    [controller.searchResultsTableView setDelegate:self];   
    CGFloat gr = 12.0;
    controller.searchResultsTableView.backgroundColor = [UIColor colorWithRed:gr green:gr blue:gr alpha:0.0];
    [controller.searchResultsTableView setSeparatorStyle:UITableViewCellSelectionStyleNone];
    CGRect searchTableFrame = CGRectMake(7, 105, 305, 292);
    [controller.searchResultsTableView setFrame:searchTableFrame];
}

Приведенный выше код устанавливает прозрачный фон, но, похоже, игнорирует размер кадра.

EDIT: решаемые Я нашел надежное решение для этого здесь . Это спасло мне жизнь.

...