Qual é a altura do teclado na tela do iPhone?


85

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


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

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.


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


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


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

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!


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)


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.