v2.5.2
Giriş yap

reactjs bileşenleri olduğu yerde sabit dursun.

hasaneryilmaz
288 defa görüntülendi

merhabalar reactjste eklediğim bir inputa telefondan odaklanınca klavye açıldığı için bileşenler yukarı doğru kayıyor. Bunu nasıl engellerim.

mesele

klavye kapalı
///////

input
yazı

////////

klavye açık
/////////

yazı
input
..........
..klavye..
.........
/////////

Cevap yaz
Cevaplar (1)
h4ckdr0
497 gün önce

React'de bu tür bir sorunu çözmek için birkaç yol vardır.

1.scrollIntoView metodunu kullanarak, input alanının görüntülenmesini sağlayabilirsiniz. Bu, sayfanın en üstünde olması gereken yere kaydırılmasını sağlar. Örnek kod şöyle olabilir:

import React from 'react';

class MyComponent extends React.Component {
  inputRef = React.createRef();

  componentDidMount() {
    this.inputRef.current.scrollIntoView();
  }

  render() {
    return (
      <input ref={this.inputRef} />
    );
  }
}

2.KeyboardAvoidingView bileşenini kullanarak, klavye açıldığında bileşenlerin yukarı doğru kaymasını engelleyebilirsiniz. Bu bileşen, klavye açıldığında otomatik olarak ekranın altına kaydırılır ve klavye kapandığında tekrar eski pozisyonuna geri döner. Örnek kod şöyle olabilir:

import { KeyboardAvoidingView } from 'react-native';

<KeyboardAvoidingView behavior="padding">
  <MyInput />
</KeyboardAvoidingView>

3.Keyboard bileşenini kullanarak, klavye açıldığında ve kapandığında yapılacak işlemleri tanımlayabilirsiniz. Örnek olarak, sayfayı yukarı doğru kaydırabilir ve klavye kapandığında tekrar eski pozisyonuna geri döndürebilirsiniz. Örnek kod şöyle olabilir:

import { Keyboard } from 'react-native';

<MyInput
  onFocus={() => {
    Keyboard.addListener('keyboardDidShow', this.scrollUp);
  }}
  onBlur={() => {
    Keyboard.removeListener('keyboardDidShow', this.scrollUp);
  }}
/>

scrollUp = () => {
  this.pageRef.current.scrollTo({ y: 0, animated: true });
};

Bu yöntemlerden hangisini kullanacağınız, ihtiyaçlarınıza ve tercihinize göre değişebilir. Uygulamanızın ihtiyaçlarına en uygun olan yöntemi seçerek sorunu çözebilirsiniz.