İPhone'un ekran klavyesinin yüksekliği nedir?


85

Dikeydeki yükseklik ve yataydaki yükseklik nokta cinsinden ölçülür.


2
Burada bir iPhone'un tüm boyutlarını bulabilirsiniz: iPhone boyutları
Pfitz

3
Son "iPhone boyutları" bağlantısını kullanmayın! 2011'den beri, iOS 8 ortaya çıktı ve ekran klavyesi yüksekliğinin değişmesine izin verdi.
Mike Gledhill

@MikeGledhill ekran klavyesi yüksekliği iOS 8'den önce bile değişiyor.
Yeniden Tespit

İlgili: Klavye yüksekliklerinin gerçek değerlerini arıyorsanız (örn. Hata ayıklama amacıyla), iOS yabancı dil klavye yüksekliklerine bakın?
Senseful

Yanıtlar:


212

İ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)")
}

4
Biraz ilgili görünse de, bu kesinlikle klavye boyutunu sabit kodlamaktan daha iyidir. Doğru cevap.
n13

2
Bu yanıta oy verdi ve soruya olumsuz oy verdi. OP kesinlikle neden bahsettiğini bilmiyor. Dikkatli olun çocuklar! Bu cevap doğrudur!
superarts.org

2
Yatay için bir tamamlayıcı: if (SYSTEM_VERSION_LESS_THAN (@ "8.0")) {_keyboardHeight = keyboardFrame.size.width; } else {_keyboardHeight = keyboardFrame.size.height; }
LiangWang

3
Klavye görünmeden bunu yapmanın bir yolu var mı? Benim durumumda, klavyenin arkasında aynı yükseklikte bir şey olmasını istiyorum (habercilerin eşyalara sahip olma şekline benzer)
John

@ superarts.org Soruyu oylamaya gerek yok; insanlar büyük olasılıkla bunu arayacaklar ve şimdi bu yanıtı görecekler .. yani her şey
yolunda

46

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.

görüntü açıklamasını buraya girin

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 .

Otomatik Yerleşimi Uygulama

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).

görüntü açıklamasını buraya girin

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.


aslında, klavye boyutu eski iOS sürümlerinde bile her zaman değişir. örneğin, el yazısını kontrol edin Çince dil
Yeniden Tespit

Ooops, bunun farkında değildim. Bu kadar çok "keyboardWillShow" örneğinin , klavye göründüğünde veya kaybolduğunda bu olayın sadece bir kez çağrılacağını varsayması , klavyenin ekranda kalmasıyla başa çıkmak için hiçbir işlevsellik olmadan, ancak boyutunu değiştirmesini garip buldum .
Mike Gledhill

1
@MikeGledhill Bence dönme nedeniyle çerçeve değişikliği veya metin tahmin çubuğunu gösterme (/ gizleme) için "UIKeyboardWillChangeFrameNotification" kullanacaksınız ...
Abdalrahman Shatou

Bunu sadece uygulamamla test ettim. UIKeyboardWillChangeFrameNotification , klavyenin görünmesini sağladığımda veya metin tahmin alanını açıp kapattığımda her zaman keyboardWillShow olayı olarak ASWELL olarak adlandırılıyor. Bu yüzden pek yardımcı olmuyor. Demek istediğim ... kullanıcıların bu olaylarda biraz dikkatli olması gerekiyor, hepsi bu.
Mike Gledhill

1
Neden bu kadar dikkat çekmiyor?
rfoo

31

Klavye yüksekliği dikey mod için 216 punto ve Yatay mod için 162 puntodur.

Kaynak


136
Kendi kendine cevaplanan sorular göndereceksen, en azından makul cevaplar ver. Klavyenin boyutu, bazı web sitelerinden alınan sabit kodlanmış bir değerden değil, bildirim nesnesinden alınmalıdır. Buraya
jrturton

16
@jrturton Soru, yüksekliği programlı olarak nasıl bulacağınız değil. Bu soru sadece programcılar için değil, aynı zamanda grafik tasarımcıları için de yararlıdır. Sorduğunuz cevap başka bir soruya ait. Aslında, bu cevaba sahip başka bir soru daha var: stackoverflow.com/a/7302291/310121
Erik B

48
@ErikB Dikkatli olun. Klavye boyutu, klavye diline ve türüne bağlıdır.
Gabriel

13
Kendi iyiliğiniz için, ASLA sabit kodlanmış değeri kullanmayın! Güçlü bir örnek olarak, bir kullanıcı, yüksekliği pek önemsemeyen bölünmüş (iki parçalı) klavyeyi kullanıyor olabilir.
Timo

6
Bu cevap tembel ve tehlikelidir. Gerçek değer iOS ana sürüm sürümleri arasında değişme eğiliminde olduğundan lütfen klavye yüksekliğini UIKeyboardDidShowNotification'dan alın. Aşağıda Ken'in cevabına bakın.
Alexander


10

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
           }
    }

9

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!


0

iPhone

Klavye Boyutları:

  1. 5S, SE, 5, 5C (320 × 568) keyboardSize = (0.0, 352.0, 320.0, 216.0) keyboardSize = (0.0, 315.0, 320.0, 253.0)

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)


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.

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.