Qual é a altura do teclado na tela do iPhone?

85

A altura em retrato e a altura em paisagem medidas em pontos.

Erik B
fonte
2
Aqui você pode encontrar todas as dimensões de um iPhone: Dimensões do iPhone
Pfitz 01/07/12
3
Não use o último link "dimensões do iPhone"! É de 2011, antes do iOS 8, e permitia que a altura do teclado na tela variasse.
Mike Gledhill
A altura do teclado na tela @MikeGledhill varia mesmo antes do iOS 8.
ReDetecção
Relacionado: Se você estiver procurando os valores reais das alturas do teclado (por exemplo, para fins de depuração), consulte as alturas do teclado de idioma estrangeiro do iOS?
Senseful

Respostas:

212

Usei a seguinte abordagem para determinar a moldura do teclado no iOS 7.1.

No método init do meu controlador de visualização, registrei-me para UIKeyboardDidShowNotification:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];

Em seguida, usei o seguinte código keyboardOnScreen:para obter acesso ao quadro do teclado. Este código obtém o userInfodicionário da notificação e acessa o NSValueassociado com UIKeyboardFrameEndUserInfoKey. Você pode então acessar o CGRect e convertê-lo para as coordenadas da visualização do seu controlador de visualização. A partir daí, você pode realizar qualquer cálculo necessário com base nesse quadro.

-(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));
 }

Rápido

E a implementação equivalente com Swift:

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)")
}
Ken Anderson
fonte
4
Embora pareça um pouco complicado, isso é certamente melhor do que codificar o tamanho do teclado. Resposta correta.
n13
2
Votou esta resposta e votou contra a questão. OP definitivamente não sabe do que está falando. Cuidado pessoal! Esta resposta é a correta!
superarts.org
2
um complemento para paisagem: if (SYSTEM_VERSION_LESS_THAN (@ "8.0")) {_keyboardHeight = keyboardFrame.size.width; } else {_keyboardHeight = keyboardFrame.size.height; }
LiangWang
3
Existe uma maneira de fazer isso sem que o teclado apareça? No meu caso, quero ter algo atrás do teclado com a mesma altura (semelhante a como os mensageiros têm as coisas)
João
@ superarts.org Não há necessidade de rejeitar a questão; as pessoas provavelmente pesquisarão por isso e agora verão esta resposta ... então está tudo bem :)
Ja͢ck
46

Lembre-se de que, com o iOS 8, o tamanho do teclado na tela pode variar. Não presuma que o teclado na tela estará sempre visível (com uma altura específica ) ou invisível.

Agora, com o iOS 8, o usuário também pode deslizar a área de previsão de texto ativada e desativada ... e, quando fizer isso, iniciará o keyboardWillShowevento de um aplicativo novamente .

Isso vai quebrar um monte de exemplos de código legado, que recomendou escrevendo um keyboardWillShowevento, que só mede a altura atual do teclado na tela, e mudando seus controles para cima ou para baixo na página, este montante (absoluto).

insira a descrição da imagem aqui

Em outras palavras, se você vir qualquer código de amostra, que apenas diz para você adicionar um keyboardWillShow evento, medir a altura do teclado e, em seguida, redimensionar as alturas de seus controles nesse valor, isso não funcionará mais sempre.

No meu exemplo acima, usei o código de amostra do site a seguir, que anima as restrições verticais constant valor das .

Praticando AutoLayout

No meu aplicativo, adicionei uma restrição ao meu UITextView , definida na parte inferior da tela. Quando a tela apareceu pela primeira vez, armazenei essa distância vertical inicial.

Então, sempre que meu keyboardWillShowevento é iniciado, eu adiciono a (nova) altura do teclado a este valor de restrição original (para que a restrição redimensione a altura do controle).

insira a descrição da imagem aqui

Sim. É feio.

E estou um pouco chateado / surpreso que o horrivelmente doloroso AutoLayout do XCode 6 não nos permite apenas anexar a parte inferior dos controles na parte inferior da tela ou na parte superior do teclado na tela.

Talvez eu esteja faltando alguma coisa.

Além da minha sanidade.

Mike Gledhill
fonte
na verdade, o tamanho do teclado sempre varia, mesmo nas versões mais antigas do iOS. por exemplo, verificar a escrita à mão no idioma chinês
ReDetecção
Opa, não percebi isso. Achei estranho que tantos exemplos de "keyboardWillShow" sempre assumiram que esse evento seria chamado apenas uma vez quando o teclado aparecesse ou desaparecesse ... sem nenhuma funcionalidade para fazer com que o teclado permanecesse na tela, mas mudando seu tamanho.
Mike Gledhill
1
@MikeGledhill Acho que você deve usar "UIKeyboardWillChangeFrameNotification" para a mudança de quadro devido à rotação ou mostrando (/ ocultando) a barra de previsão de texto ...
Abdalrahman Shatou
Acabei de testar isso com meu aplicativo. O UIKeyboardWillChangeFrameNotification sempre é chamado ASWELL AS do evento keyboardWillShow, sempre que faço o teclado aparecer ou ligo ou desativo a área de previsão de texto. Então realmente não ajuda muito. Meu ponto é ... os usuários precisam ter um pouco de cuidado com esses eventos, só isso.
Mike Gledhill
1
Por que isso não tem muito mais atenção?
rfoo
31

A altura do teclado é de 216 pontos para o modo retrato e 162 pontos para o modo paisagem.

Fonte

Erik B
fonte
136
Se você vai postar perguntas auto-respondidas, pelo menos dê respostas decentes. O tamanho do teclado deve ser obtido a partir do objeto de notificação, não um valor embutido em código obtido de algum site. Veja aqui
jrturton
16
@jrturton A questão não é como encontrar a altura programaticamente. Esta pergunta não é útil apenas para programadores, mas também para designers gráficos e outros. A resposta que você está pedindo pertence a outra pergunta. Na verdade, há outra pergunta com essa resposta: stackoverflow.com/a/7302291/310121
Erik B
48
@ErikB Tenha cuidado. O tamanho do teclado depende do idioma e do tipo de teclado.
Gabriel
13
Para seu próprio bem, NUNCA use o valor embutido no código! Como um exemplo forte, um usuário pode estar usando o teclado dividido (duas partes), que não se importa muito com a altura.
Timo
6
Essa resposta é preguiçosa e perigosa. Obtenha a altura do teclado em UIKeyboardDidShowNotification, pois o valor real tende a mudar entre as versões principais do iOS. Veja a resposta de Ken abaixo.
Alexander
16

nota de versão: este não é mais o valor no iOS 9 e 10, pois eles suportam tamanhos de teclado personalizados.

Isso depende do modelo e da barra QuickType:

insira a descrição da imagem aqui

http://www.idev101.com/code/User_Interface/sizes.html

Philipp Sander
fonte
1
nota de versão : este não é mais o valor no iOS 9 e 10, pois eles suportam tamanhos de teclado personalizados.
Raptor
10

A altura do teclado depende do modelo, da barra QuickType, das configurações do usuário ... A melhor abordagem é calcular dinamicamente:

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
           }
    }
torcelly
fonte
9

Não consigo encontrar a resposta mais recente, então verifico tudo com o simulador. (IOS 11.0)


Dispositivo | Altura da tela | Retrato | Panorama

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 de 5ª geração, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024,0 | 265,0 | 353,0


Obrigado!

Seungyoun Yi
fonte
0

Iphone

Tamanho do teclado:

  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)

Jr.iOS_dev_T27
fonte
0

Criei esta tabela que contém as alturas dos teclados do iPhone e do iPad, tanto no modo paisagem quanto no modo retrato, com a barra de ferramentas ligada e desligada.

Eu até expliquei como você pode usar essas dimensões em seu código aqui .

Observe que você só deve usar essas dimensões se precisar saber a dimensão do teclado antes de fazer o layout da vista. Caso contrário, as soluções das outras respostas funcionam melhor.

insira a descrição da imagem aqui

Marybnq
fonte