Czy możliwe jest dynamiczne uzyskanie ramy, a właściwie jej wysokości? Ponieważ mam UITextView
i chciałbym dostosować jego wysokość stosownie do wysokości klatki klawiatury, gdy metoda wprowadzania klawiatury zostanie zmieniona. Jak wiadomo, różne metody wprowadzania mogą mieć inną wysokość klatki klawiatury.Dynamicznie uzyskaj ramkę klawiatury
Odpowiedz
spróbuj tego:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification
object:nil];
- (void)keyboardWasShown:(NSNotification *)notification
{
// Get the size of the keyboard.
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
//Given size may not account for screen rotation
int height = MIN(keyboardSize.height,keyboardSize.width);
int width = MAX(keyboardSize.height,keyboardSize.width);
//your other code here..........
}
Po prostu wykonaj ten samouczek od Apple, a dostaniesz to, co chcesz. Apple Documentation. Aby określić obszar objęty klawiaturą, zapoznaj się z tym tutorial.
Ale jak mogę wykryć akcję zmiany metody wprowadzania? –
Jeśli jesteś programistą, powinieneś wiedzieć, która klawiatura wejściowa została otwarta przez ciebie w danym momencie. – doNotCheckMyBlog
Chciałbym wiedzieć, ale nie mogłem. Jeśli wiesz, jak wykryć metodę zmiany metody wprowadzania i uzyskać wysokość aktualnej klawiatury, czy możesz uprzejmie mnie poinformować. Naprawdę to doceniam :) –
Dla Swift 3 użytkowników, kod @Hector (z pewnymi dodatkami) byłoby:
w twojej viewDidLoad
dodać obserwatora:
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(_:)), name: .UIKeyboardDidShow , object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidHide(_:)), name: .UIKeyboardDidHide , object: nil)
Następnie zaimplementuj następujące metody:
func keyboardDidShow(_ notification: NSNotification) {
print("Keyboard will show!")
// print(notification.userInfo)
let keyboardSize:CGSize = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue.size
print("Keyboard size: \(keyboardSize)")
let height = min(keyboardSize.height, keyboardSize.width)
let width = max(keyboardSize.height, keyboardSize.width)
}
func keyboardDidHide(_ notification: NSNotification) {
print("Keyboard will hide!")
}
Możesz dodać ten kod do widoku, który zawiera pole tekstowe w Swift 3. Spowoduje to, że pole tekstowe będzie animowane w górę iw dół za pomocą klawiatury.
private var keyboardIsVisible = false
private var keyboardHeight: CGFloat = 0.0
// MARK: Notifications
private func registerForKeyboardNotifications() {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillBeHidden(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
private func deregisterFromKeyboardNotifications() {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
// MARK: Triggered Functions
@objc private func keyboardWillShow(notification: NSNotification) {
keyboardIsVisible = true
guard let userInfo = notification.userInfo else {
return
}
if let keyboardHeight = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.height {
self.keyboardHeight = keyboardHeight
}
if !textField.isHidden {
if let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber,
let curve = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber {
animateHUDWith(duration: duration.doubleValue,
curve: UIViewAnimationCurve(rawValue: curve.intValue) ?? UIViewAnimationCurve.easeInOut,
toLocation: calculateTextFieldCenter())
}
}
}
@objc private func keyboardWillBeHidden(notification: NSNotification) {
keyboardIsVisible = false
if !self.isHidden {
guard let userInfo = notification.userInfo else {
return
}
if let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber,
let curve = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber {
animateHUDWith(duration: duration.doubleValue,
curve: UIViewAnimationCurve(rawValue: curve.intValue) ?? UIViewAnimationCurve.easeInOut,
toLocation: calculateTextFieldCenter())
}
}
}
// MARK: - Helpers
private func animateHUDWith(duration: Double, curve: UIViewAnimationCurve, toLocation location: CGPoint) {
UIView.beginAnimations(nil, context: nil)
UIView.setAnimationDuration(TimeInterval(duration))
UIView.setAnimationCurve(curve)
textField.center = location
UIView.commitAnimations()
}
private func calculateTextFieldCenter() -> CGPoint {
if !keyboardIsVisible {
return self.center
} else {
let yLocation = (self.view.frame.height - keyboardHeight)/2
return CGPoint(x: self.center.x, y: yLocation)
}
}
- 1. Jak dynamicznie wypełnić ramkę graficzną
- 2. Android - Uzyskaj naciśnięcie klawisza klawiatury
- 3. Uzyskaj ścieżkę trasy dynamicznie
- 4. Uzyskaj klasy nazw PHP dynamicznie
- 5. Uzyskaj kod Scancode klawiatury o znaku
- 6. Zapisz ramkę danych Spark jako dynamicznie podzieloną tabelę w Hive
- 7. Uzyskaj funkcję według nazwy dynamicznie w Kotlin
- 8. Uzyskaj dynamicznie typ AnyObject w Swift
- 9. Uzyskaj wysokość klawiatury programowej w Adobe AIR Mobile
- 10. Obsługa klawiatury WP8
- 11. Typ wejściowy klawiatury klawiatury iOS z przecinkiem
- 12. Klawiatura iOS Odrzucaj interakcję - pobierz ramkę, gdy użytkownik rozciąga się.
- 13. Dodaj ramkę lub ramkę do ImageView i upuść cień
- 14. Jak podzielić ramkę danych?
- 15. spłaszczyć ramkę danych
- 16. System.Windows.Forms.GroupBox Ukryj ramkę
- 17. Jak ustawić ramkę UIImage
- 18. przyspieszenia ramkę danych pasujący
- 19. Jak ustawić ramkę cell.imageview
- 20. rozmiar klawiatury podany przez NSNotificationCenter
- 21. Uzyskaj ramkę/ograniczenia NSView w stosunku do ekranu w systemie Mac OS X 10.6
- 22. contentEditable + selectAll: Firefox nie pozwoli na wejście klawiatury dynamicznie generowanej zawartości
- 23. Uzyskaj wzrost wysokości sztaby
- 24. Wykrywanie klawiatury iPada hide versus podłączenie klawiatury zewnętrznej?
- 25. Aplikacja zawiesza się podczas zmiany języka klawiatury klawiatury wejściowej Windows
- 26. Lista kodów skanowania klawiatury hex i dokumentacja klawiatury USB HID
- 27. iOS 11 - Wysokość klawiatury powraca 0 w powiadomieniu klawiatury
- 28. Android: Wykrywanie nieaktywności użytkownika/Wykrywanie klawiatury (z klawiatury programowej)
- 29. Jak wykrywać zmiany w ramce klawiatury podczas interaktywnego odrzucania klawiatury?
- 30. iPhone iOS - uzyskaj wysokość UIKeyboard PRZED klawiaturąWillShow
Jest to szczególnie przydatne podczas pracy z różnymi klawiaturami wysokości/typu w systemie iOS8. Do tej pory wystarczyło tylko hardcoding 216 (portret). Dzięki. – n00bProgrammer
na ios 8 nadal zachowuje 216, co jest błędne. – harshitgupta
@Hector Czy to również działa na iOS8? – msmq