1

У меня есть UITableView с панелью поиска и поиска контроллера отображения результата:центр UIActivityIndicator, когда клавиатура активна

[self.searchDisplayController.searchResultsTableView addSubview:searchIndicator]; 
searchIndicator.center = CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.height/2.0); 

Код выше помещает индикатор в центре экрана. Однако я хочу поместить индикатор в центр кадра, исключая клавиатуру. Как я могу это сделать?

Показатель определяется следующим образом:

@property (retain, nonatomic) IBOutlet UIActivityIndicatorView *searchIndicator; 

enter image description here

+0

центр.y = (self.view.frame.size.height - keyBoardHeight)/2 –

+0

что такое keyBoardHeight? – cateof

ответ

1

@SaurabhPrajapati имеет право идею в своем комментарии. Вам нужно будет подписаться на одну из клавиатурных уведомлений willShow/didShow (UIKeyboardDidShowNotification или UIKeyboardWillShowNotification), и когда вы получите уведомление о клавиатуре, соберите информацию о высоте клавиатуры с Keyboard Notification User Info Keys (поиск в справочной системе Xcode на этой строке для получения дополнительной информации информация.) Сохраните высоту клавиатуры до переменной экземпляра, а затем, когда вы будете готовы отображать индикатор активности, используйте высоту клавиатуры, чтобы отрегулировать положение индикатора, как указано в комментарии Saurabh.

0

добавить это в viewDidLoad

//KeyBoard Helpers 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 

Затем реализовать этот метод

-(void)keyBoardWillShow:(NSNotification*)notification 
{ 
    NSDictionary *userInfo = [notification userInfo]; 
    CGRect keyboardFrame = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 
    CGFloat keyBoardHeight = keyboardFrame.size.height; 
    searchIndicator.center = CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.height - keyBoardHeight/ 2.0); 
} 
+0

Я понимаю код, но он не работает. Я думаю, проблема в том, что searchIndicator.center должен иметь место в viewDidLoad. – cateof

+0

В представлении ViewDidLoad см. Инструкцию [self.searchDisplayController.searchResultsTableView addSubview: searchIndicator]; т.е. searchIndicator уже размещен как subview – cateof

+1

Вы не можете переместить представления в 'viewDidLoad', потому что они еще не были выложены для текущего размера и ориентации экрана. Вам нужно подождать до 'viewWillAppear' или' viewDidLayoutSubviews'. Кроме того, клавиатура еще не отображается. Установлен ли контроллер вашего вида, чтобы клавиатура отображалась сразу после отображения контроллера вида? –

0

Вы можете просто добавить ограничение к верхней части UIActivityIndicatorView и внутри уведомлений о клавиатуре. Когда клавиатура будет отображаться, вы уменьшаете ее на высоту клавиатуры, если клавиатура будет скрыта, вы снова добавляете высоту клавиатуры в верхнее ограничение.

Смежные вопросы