Chcę dodać accessoryView na klawiaturze wywoływanej z paska UISearchBar. Ponieważ program UISearchBar nie implementuje tej właściwości, właśnie utworzyłem pasek narzędzi. Po tym, jak podjąłem w sprawie Apple's documentation, zdecydowałem się użyć centrum powiadomień nie tylko do poznania, kiedy klawiatura jest wywoływana, ale także do poznania wielkości klawiatury, która zmienia się w zależności od orientacji.rozmiar klawiatury podany przez NSNotificationCenter
Podążyłem za przykładem w dokumentacji i na metodzie keyboardWasShown
wywołuję animację, która pokaże pasek narzędzi na klawiaturze. Coś takiego:
-(void)keyboardWasShown:(NSNotification*)aNotification {
NSDictionary *info=[aNotification userInfo];
CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"width: %.1f; heigth: %.1f", keyboardSize.width, keyboardSize.height);
[self showAccessoryView:keyboardSize.height];
}
, a na animacji ustawić ramkę pasku takiego:
self.auxiliaryKeyboardBar.frame=CGRectMake(0, self.view.frame.size.height-(44+kbh), self.view.frame.size.width, 44);
gdzie 44 jest statyczna heigth paska narzędzi i kbh jest keyboard.size .thigth przeszedłem z powyższej metody.
Problem, który obserwuję, polega na tym, że rozmiar klawiatury podawany przez Słownik userInfo
zawsze odnosi się do orientacji pionowej. Tak, NSLog o orientacji pionowej jest:
width: 320.0; heigth: 216.0
, który jest ok
ale kiedy zmienić orientację na poziomą i nazywam klawiatury, NSLog się następująco:
width: 162.0; heigth: 480.0
, co stawia pasek narzędzi poza zakresem.
tak, skończyło się dodając warunkowego przed wywołaniem animacji, takich jak ten:
if ([self deviceIsPortrait]==YES) {
[self showAccessoryView:keyboardSize.height];
}else if ([self deviceIsPortrait]==NO) {
[self showAccessoryView:keyboardSize.width];
}
Jestem teraz zastanawiasz się, czy robię coś źle, bo ja po przykład Apple precyzyjnie aby uniknąć zależności od wysokości klawiatury (jako zmiennoprzecinkowej) i ostatecznie musiałem dodać warunkową wartość warunkową.
Jakieś pomysły na to, co się tutaj dzieje?
CGRect przechowywane w kluczu UIKeyboardFrameBeginUserInfoKey jest w układ współrzędnych okna (który zawsze jest w orientacji nieobrotowej) –
Dziękuję obojgu za odpowiedź i wyjaśnienie. Wszystko razem to trochę ból w szyi. – Marcal
To wydaje się nie działać dla mnie na 64-bitowych urządzeniach. – korbonix