Подтвердить что ты не робот

Проблема с анимацией UISearchBar

У меня есть UIViewController, в котором я хочу показать tableview с помощью theBar. Как просто:

//viewDidLoad
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0,
                                                           0, 
                                                           SCREEN_WIDTH(),
                                                           SCREEN_HEIGHT())
                                                    style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;

[self.view addSubview:_tableView];

// adding uisearch bar
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];

_tableView.tableHeaderView = searchBar;



//
 searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchDisplayController.delegate = self;
searchDisplayController.searchResultsDataSource = self;

Проблема возникает, когда я нажимаю на панель uisearch, чтобы начать анимацию, и похоже, что она имеет нежелательное смещение 20px.

4b9b3361

Ответ 1

В качестве напоминания для всех, у кого есть подобные проблемы. Мне нужно было добавить эту строку, которая фиксировала вещи:

self.edgesForExtendedLayout = UIRectEdgeNone;

Ответ 2

В вашей раскадровке выберите проблемный контроллер, посмотрите вкладку "Атрибуты" и попробуйте изменить эти параметры:

  • Под верхними барами
  • Под непрозрачными барами

Я решил аналогичную проблему с unflagging этого параметра.

Ответ 3

Я нашел причину этой проблемы. Кажется, что анимация перепуталась, когда вы устанавливаете navigationBar.translucent равным NO. Если вы сделаете свой навигационный полупрозрачный, все должно работать нормально, но это определенно не идеальное решение. Я попытаюсь найти обходное решение.

Ответ 4

UITableView *_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0,
                                                           64,
                                                           self.view.frame.size.width,
                                                           self.view.frame.size.height)
                                          style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;

[self.view addSubview:_tableView];

// adding uisearch bar
UISearchBar* searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];

_tableView.tableHeaderView = searchBar;



//
UISearchDisplayController* searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchDisplayController.delegate = self;
searchDisplayController.searchResultsDataSource = self;

и я просто заказываю контроллер с контроллером UINavigation и его работу достаточно хорошо. enter image description here

Ответ 5

Вы можете отменить анимацию путем подкласса UISearchDisplayController и добавить это:

- (void)setActive:(BOOL)visible animated:(BOOL)animated
{
     if(self.active == visible) return;
     [self.searchContentsController.navigationController setNavigationBarHidden:YES animated:NO];
     [super setActive:visible animated:animated];
     [self.searchContentsController.navigationController setNavigationBarHidden:NO animated:NO];
     if (visible) {
          [self.searchBar becomeFirstResponder];
     } else {
          [self.searchBar resignFirstResponder];
     }
}

Ответ 6

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

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.navigationController.navigationBar.translucent = NO;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.navigationController.navigationBar.translucent = YES;
}

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

Ответ 7

Почему вы создаете searchBar программно, а не в StoryBoard? В настоящее время я использую searchBar, добавленный в раскадровку, и он отлично работает (мне нужно изменить contentOffset)

Ответ 8

Я применил ваш код, Он отлично работает для меня. Просто скройте навигационную панель и запустите панель поиска с y = 20 вместо y = 0;