Dikeydeki yükseklik ve yataydaki yükseklik nokta cinsinden ölçülür.
Dikeydeki yükseklik ve yataydaki yükseklik nokta cinsinden ölçülür.
Yanıtlar:
İOS 7.1'de klavyenin çerçevesini belirlemek için aşağıdaki yaklaşımı kullandım.
Görünüm denetleyicimin başlangıç yönteminde, aşağıdakiler için kaydoldum UIKeyboardDidShowNotification:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];
Ardından, keyboardOnScreen:klavyenin çerçevesine erişmek için aşağıdaki kodu kullandım . Bu kod userInfosözlüğü bildirimden alır ve ardından NSValueilişkili olana erişir UIKeyboardFrameEndUserInfoKey. Daha sonra CGRect'e erişebilir ve onu görünüm denetleyicinizin görünümünün koordinatlarına dönüştürebilirsiniz. Oradan, bu çerçeveye göre ihtiyacınız olan tüm hesaplamaları yapabilirsiniz.
-(void)keyboardOnScreen:(NSNotification *)notification
{
NSDictionary *info = notification.userInfo;
NSValue *value = info[UIKeyboardFrameEndUserInfoKey];
CGRect rawFrame = [value CGRectValue];
CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];
NSLog(@"keyboardFrame: %@", NSStringFromCGRect(keyboardFrame));
}
Swift
Ve Swift ile eşdeğer uygulama:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)
@objc
func keyboardDidShow(notification: Notification) {
guard let info = notification.userInfo else { return }
guard let frameInfo = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
let keyboardFrame = frameInfo.cgRectValue
print("keyboardFrame: \(keyboardFrame)")
}
Hatırlıyor musun, iOS 8 ile, ekrandaki klavyenin boyutu olabilir değişir. Ekran klavyesinin her zaman görünür ( belirli bir yükseklikte) veya görünmez olacağını varsaymayın .
Artık iOS 8 ile kullanıcı metin tahmin alanını açıp kapatabilir ... ve bunu yaptıklarında, bir uygulamanın keyboardWillShowetkinliğini tekrar başlatır. .
Bu ,keyboardWillShow yalnızca ekran klavyesinin geçerli yüksekliğini ölçen bir olay yazmayı ve kontrollerinizi bu (mutlak) miktarda sayfada yukarı veya aşağı kaydırmanızı öneren birçok eski kod örneğini bozacaktır.

Başka bir deyişle, herhangi bir örnek kod görürseniz, size yalnızca bir keyboardWillShow olay , klavye yüksekliğini ölçmenizi ve ardından kontrollerinizin yüksekliğini bu miktarda yeniden boyutlandırmanızı , bu artık her zaman çalışmayacaktır.
Yukarıdaki örneğimde, aşağıdaki siteden dikey kısıtlama constantdeğerini canlandıran örnek kodu kullandım .
Uygulamamda bir kısıtlama ekledim UITextView alt kısmına . Ekran ilk göründüğünde, bu ilk dikey mesafeyi sakladım.
Ardından, keyboardWillShowetkinliğim her başlatıldığında, (yeni) klavye yüksekliğini bu orijinal kısıtlama değerine eklerim (böylece kısıtlama , kontrolün yüksekliğini yeniden boyutlandırır).

Evet. Bu çirkin.
Ve XCode 6'nın korkunç derecede acı veren AutoLayout'unun sadece kontrollerin alt kısımlarını ekranın altına ya da ekran klavyesinin üstüne eklememize izin vermemesine biraz kızdım / şaşırdım.
Belki bir şeyi kaçırıyorum.
Akıl sağlığım dışında.
Klavye yüksekliği dikey mod için 216 punto ve Yatay mod için 162 puntodur.
sürüm notu: Özel klavye boyutlarını destekledikleri için bu artık iOS 9 ve 10'da bir değer değildir.
Bu, modele ve QuickType çubuğuna bağlıdır:

Klavye yüksekliği modele, QuickType çubuğuna, kullanıcı ayarlarına bağlıdır ... En iyi yaklaşım dinamik olarak hesaplamaktır:
Swift 3.0
var heightKeyboard : CGFloat?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
}
func keyboardShown(notification: NSNotification) {
if let infoKey = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
let rawFrame = (infoKey as AnyObject).cgRectValue {
let keyboardFrame = view.convert(rawFrame, from: nil)
self.heightKeyboard = keyboardFrame.size.height
// Now is stored in your heightKeyboard variable
}
}
En son cevabı bulamıyorum, bu yüzden hepsini simülatör ile kontrol ediyorum. (İOS 11.0)
Cihaz | Ekran Yüksekliği | Portre | Manzara
iPhone 4s | 480.0 | 216.0 | 162.0
iPhone 5, iPhone 5s, iPhone SE | 568.0 | 216.0 | 162.0
iPhone 6, iPhone 6s, iPhone 7, iPhone 8, iPhone X | 667.0 | 216.0 | 162.0
iPhone 6 plus, iPhone 7 plus, iPhone 8 plus | 736.0 | 226.0 | 162.0
iPad 5. nesil, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265.0 | 353.0
Teşekkürler!
iPhone
Klavye Boyutları:
2.6S, 6,7,8: (375 × 667): keyboardSize = (0.0, 407.0, 375.0, 260.
3.6 +, 6S +, 7+, 8+: (414 × 736) keyboardSize = (0.0, 465.0, 414.0, 271.0)
4.XS, X: (375 X 812) keyboardSize = (0.0, 477.0, 375.0, 335.0)
5.XR, XSMAX ((414 x 896) keyboardSize = (0.0, 550.0, 414.0, 346.0)
Hem yatay hem de dikey mod için hem iPhone hem de iPad klavyelerinin yüksekliklerini içeren bu tabloyu hem araç çubuğu açık hem de kapalıyken oluşturdum.
Hatta kodunuzda bu boyutları nasıl kullanabileceğine açıkladı buraya .
Görünümü düzenlemeden önce klavyenin boyutunu bilmeniz gerektiğinde bu boyutları kullanmanız gerektiğini unutmayın. Aksi takdirde diğer cevaplardan gelen çözümler daha iyi sonuç verir.