国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Web-Frontend js-Tutorial Wie kann das Problem der Tastaturverdeckung in React-Native gel?st werden?

Wie kann das Problem der Tastaturverdeckung in React-Native gel?st werden?

Jul 16, 2017 pm 03:26 PM
keyboard react-native Frage

W?hrend der Entwicklung sto?en wir h?ufig auf Stellen, an denen Eingaben erforderlich sind. Obwohl der von RN erw?hnte TextInput einfach zu verwenden ist, l?st er das Okklusionsproblem leider nicht.

Oft erscheint die Tastatur und blockiert das Bearbeitungsfeld, was Kopfschmerzen bereitet.

Ursprünglich wollte ich in der js.coach-Bibliothek nach Plug-ins von Drittanbietern suchen, und das beste, das ich gesehen habe, war React-native-keyboard-spacer. Eines fehlt uns jedoch noch ist die Tastatur hoch zu bekommen.

Ich habe das auch lange überprüft und es wurde nicht bereitgestellt. Also musste ich mein eigenes natives Modul schreiben, um die H?he der Tastatur zu ermitteln.

Ich werde nicht viel über die Tastaturh?he in nativem iOS sagen. Es gibt viele davon im Internet. Ich habe meinen Code direkt auf Basis von RN geschrieben:

// 
// KeyboardHeight.h 
// Jicheng6 
// 
// Created by guojicheng on 16/11/7. 
// Copyright ? 2016年 Facebook. All rights reserved. 
// 
 
#import <UIKit/UIKit.h> 
#import "RCTEventEmitter.h" 
#import "RCTBridgeModule.h" 
 
@interface KeyboardHeight : RCTEventEmitter<RCTBridgeModule> 
 
-(void)heightChanged:(int)height; 
 
@property (nonatomic, assign)int kbHeight; 
 
@end
// 
// KeyboardHeight.m 
// Jicheng6 
// 
// Created by guojicheng on 16/11/7. 
// Copyright ? 2016年 Facebook. All rights reserved. 
// 
 
#import "KeyboardHeight.h" 
 
@implementation KeyboardHeight 
 
RCT_EXPORT_MODULE(); 
 
- (instancetype)init 
{ 
 self = [super init]; 
 if (self) { 
  self.kbHeight = 0; 
  [[NSNotificationCenter defaultCenter] addObserver:self 
                       selector:@selector(keyboardDidShow:) 
                         name:UIKeyboardDidShowNotification 
                        object:nil]; 
 } 
 return self; 
} 
 
-(void)keyboardDidShow:(NSNotification*) aNotification 
{ 
 //獲取鍵盤的高度 
 NSDictionary *userInfo = [aNotification userInfo]; 
 NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]; 
 CGRect keyboardRect = [aValue CGRectValue]; 
 if (_kbHeight != keyboardRect.size.height){ 
  _kbHeight = keyboardRect.size.height; 
  [self heightChanged:_kbHeight]; 
 } 
} 
 
RCT_REMAP_METHOD(getKBHeight, 
         resolver:(RCTPromiseResolveBlock)resolve 
         rejecter:(RCTPromiseRejectBlock)reject) 
{ 
 resolve([[NSNumber alloc]initWithInt:_kbHeight]); 
} 
 
- (NSArray<NSString *> *)supportedEvents 
{ 
 return @[@"heightChanged"]; 
} 
 
-(void)heightChanged:(int)height 
{ 
 [self sendEventWithName:@"heightChanged" body:[NSNumber numberWithUnsignedInt:height]]; 
} 
 
@end

Tats?chlich stand in meinem vorherigen Blog auch, dass ich zun?chst die H?he über RCT_REMAP_METHOD ermitteln wollte. Als die Tastatur zum ersten Mal auftauchte, war sie nach dem Auftauchen leider nicht mehr vorhanden. Nachdem ich es erhalten hatte, war es immer noch 0, also habe ich eine Abh?rfunktion heightChanged hinzugefügt. Wenn der aufgezeichnete Wert nicht mit dem ge?nderten Wert übereinstimmt, wird die Abh?rfunktion aufgerufen und der Wert an die JS-Seite übergeben. Auf diese Weise kann die JS-Seite nach Erkennung der ?nderungen entsprechende ?nderungen vornehmen.

Okay, das native Modul ist gekapselt. Dies ist auch ein altes Thema. Fügen Sie einfach den Code ein ??>


import React, { Component } from &#39;react&#39;; 
import { 
  AppRegistry, 
  StyleSheet, 
  Text, 
  View, 
  TouchableOpacity, 
  Alert, 
  TextInput, 
  PixelRatio, 
  Linking, 
  Keyboard, 
  NativeEventEmitter, 
} from &#39;react-native&#39;; 
 
var Dimensions = require(&#39;Dimensions&#39;); 
var ScreenWidth = Dimensions.get(&#39;window&#39;).width; 
var ScreenHeight = Dimensions.get(&#39;window&#39;).height; 
 
var kbHeight = require(&#39;NativeModules&#39;).KeyboardHeight; 
const kbHeightEvt = new NativeEventEmitter(kbHeight);

Die H?he wurde hier ermittelt, und der n?chste Schritt besteht darin, das Problem der Addition und Subtraktion zu l?sen.

componentWillMount() { 
    this.heightChanged = kbHeightEvt.addListener(&#39;heightChanged&#39;, this._heightChanged.bind(this)); 
  } 
  componentDidMount() { 
 
  } 
  componentWillUnmount() { 
    this.heightChanged.remove(); 
  } 
  _heightChanged(data){ 
    // console.log(data); 
    this.keyboardHeight = data; 
    this.changeMarginTop();//這里我是處理高度的 
  }
Wir müssen die Position des Eingabefelds auf dem Bildschirm ermitteln und diese dann mit der H?he der Tastatur vergleichen. Wir ermitteln die Position des Eingabefelds über onLayout:


Wenn Sie derzeit eine Komponente und eine Seite haben, besteht keine Notwendigkeit, das zu tun, was ich getan habe, und ein Global hinzuzufügen, um ihre Gro?vaterkomponenten aufzuzeichnen (haupts?chlich, um die gesamte Seite nach oben zu verschieben).

onLayoutParent(event){ 
    if (this.orgLayoutParent == null){//獲取的父組件的位置,因?yàn)橐玫接?jì)算 
      this.orgLayoutParent = event.nativeEvent.layout; 
    } 
    console.log(&#39;parent layout: &#39;, event.nativeEvent.layout); 
  } 
  onLayoutMail(event){//獲取輸入框的位置,這個位置是相對父組件的位置,所以上面需要獲得父組件的 
    this.layoutMail = event.nativeEvent.layout; 
  } 
  onFocusMail(event){ 
    this.focusName = &#39;mail&#39;;//定義一個標(biāo)識,可以區(qū)分不同輸入框 
    this.changeMarginTop();//統(tǒng)一處理高度的函數(shù) 
  } 
  onSubmitMail(){ 
    drawLayout.setKBMoveY(0);//當(dāng)輸入完畢時,重置回原來的狀態(tài) 
  } 
  changeMarginTop(){//計(jì)算移動的距離 
    var layout = null; 
    if (this.focusName == &#39;mail&#39;){ 
      layout = this.layoutMail; 
    } 
    if (layout && this.orgLayoutParent.y + layout.y + layout.height > ScreenHeight - this.keyboardHeight){ 
      drawLayout.setKBMoveY(-(this.orgLayoutParent.y + layout.y + layout.height - ScreenHeight + this.keyboardHeight)); 
    }else{//不對的置零處理 
      drawLayout.setKBMoveY(0); 
    } 
  } 
  render() { 
    return ( 
      <View style={[styles.container, this.props.style ? this.props.style : {}]} onLayout={this.onLayoutParent.bind(this)}> 
        <View style={[styles.viewStyle, {marginTop: 10}]} onLayout={this.onLayoutMail.bind(this)}>//這里獲取的是相對位置哦 
          <TextInput style={styles.textInputStyle} 
            onChangeText={this.onTextChange.bind(this)} 
            value={this.state.emailPath} 
            placeholder={&#39;請輸入郵箱&#39;} 
            onFocus={this.onFocusMail.bind(this)}//當(dāng)獲取到焦點(diǎn)時觸發(fā) 
            onSubmitEditing={this.onSubmitMail.bind(this)}/>//點(diǎn)擊回車時的調(diào)用,這里可以根據(jù)需求去做 
          <TouchableOpacity onPress={this.onSubmitSend.bind(this)}> 
            <View style={[styles.sendButtonView, {}]}> 
              <Text style={styles.sendButtonText}> 
                發(fā)送 
              </Text> 
            </View> 
          </TouchableOpacity> 
        </View> 
      </View> 
    ); 
  }
Wir haben auch den Abstand berechnet. Der n?chste Schritt besteht darin, dem drawLayout eine

Animation
hinzuzufügen und diese dann nicht so abrupt zu verschieben.

Das ist es. Machen Sie dann einen Screenshot, um den Effekt zu sehen. Obwohl es eine Animation gibt, kann ich kein dynamisches Bild erstellen

import React, { Component } from &#39;react&#39;; 
import { 
 StyleSheet, 
 Text, 
 View, 
 TouchableOpacity, 
 Animated, 
} from &#39;react-native&#39;; 
 
import SendEmail from &#39;./SendEmail&#39;; 
 
export default class DrawLayout extends Component { 
 constructor(props){ 
  super(props); 
  this.state={ 
   kbShowY: new Animated.Value(0),//設(shè)置動畫的初始值 
  }; 
  global.drawLayout = this;//這里將自己保存到global里面,方便它的子組件調(diào)用 
 } 
 setKBMoveY(y){ 
  Animated.timing(//這里用的是timing均勻變化,具體的參數(shù),可以參考RN的文檔,寫的很詳細(xì)了,這里就不啰嗦了。 
   this.state.kbShowY,{ 
    toValue: y,//變化到目的位置 
    delay: 250,//延時250毫秒 
   }, 
  ).start();//開始 
 } 
 componentWillUnmount() { 
  global.drawLayout = null;//降這個值賦值為空 
 } 
  
 render() { 
  return ( 
   <Animated.View style={[styles.container, {marginTop: this.state.kbShowY}]} >//使用Animated.View 
    <SendEmail style={{marginTop: 10}}/> 
   </Animated.View> 
  ); 
 } 
}

Das obige ist der detaillierte Inhalt vonWie kann das Problem der Tastaturverdeckung in React-Native gel?st werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Valve verbietet neue Tastaturfunktionen Razer Snap Tap und Wooting Snappy Tappy in Counter-Strike 2 Valve verbietet neue Tastaturfunktionen Razer Snap Tap und Wooting Snappy Tappy in Counter-Strike 2 Aug 20, 2024 pm 09:46 PM

Razer hat kürzlich die Snap Tap-Funktion für perfektes Counter-Strafing auf den Huntsman V3 Pro-Tastaturen eingeführt und Wooting reagierte auf Community-Anfragen mit Snappy Tappy (ehemals SOCD). Diese hardwarebasierten Tastaturfunktionen erleichtern die Bedienung

Probleme bei der Bewertung des Clustering-Effekts in Clustering-Algorithmen Probleme bei der Bewertung des Clustering-Effekts in Clustering-Algorithmen Oct 10, 2023 pm 01:12 PM

Das Problem der Clustering-Effektbewertung im Clustering-Algorithmus erfordert spezifische Codebeispiele. Clustering ist eine unbeaufsichtigte Lernmethode, die ?hnliche Stichproben durch Clustering von Daten in eine Kategorie gruppiert. Bei Clustering-Algorithmen ist die Bewertung des Clustering-Effekts ein wichtiges Thema. In diesem Artikel werden mehrere h?ufig verwendete Indikatoren zur Bewertung des Clustering-Effekts vorgestellt und entsprechende Codebeispiele gegeben. 1. Clustering-Effekt-Bewertungsindex Silhouette-Koeffizient Der Silhouette-Koeffizient bewertet den Clustering-Effekt, indem er die N?he der Stichprobe und den Grad der Trennung von anderen Clustern berechnet.

Erfahren Sie, wie Sie h?ufige iPhone-Probleme diagnostizieren Erfahren Sie, wie Sie h?ufige iPhone-Probleme diagnostizieren Dec 03, 2023 am 08:15 AM

Das iPhone ist für seine leistungsstarke Leistung und seine vielseitigen Funktionen bekannt und ist nicht immun gegen gelegentliche Probleme oder technische Schwierigkeiten, ein h?ufiges Merkmal komplexer elektronischer Ger?te. iPhone-Probleme k?nnen frustrierend sein, aber normalerweise ist kein Alarm erforderlich. In diesem umfassenden Leitfaden m?chten wir einige der am h?ufigsten auftretenden Herausforderungen im Zusammenhang mit der iPhone-Nutzung entmystifizieren. Unser Schritt-für-Schritt-Ansatz soll Ihnen bei der L?sung dieser h?ufigen Probleme helfen und praktische L?sungen und Tipps zur Fehlerbehebung bieten, damit Ihre Ger?te wieder einwandfrei funktionieren. Unabh?ngig davon, ob Sie mit einer St?rung oder einem komplexeren Problem konfrontiert sind, kann Ihnen dieser Artikel dabei helfen, diese effektiv zu beheben. Allgemeine Tipps zur Fehlerbehebung Bevor wir uns mit den spezifischen Schritten zur Fehlerbehebung befassen, finden Sie hier einige hilfreiche Tipps

Welche Fragen gibt es in der Rulong 8 Wine Master-Prüfung? Welche Fragen gibt es in der Rulong 8 Wine Master-Prüfung? Feb 02, 2024 am 10:18 AM

Welche Fragen beinhaltet die Yulong 8 Wine Master-Prüfung? Wie lautet die entsprechende Antwort? Wie kann man die Prüfung schnell bestehen? Es gibt viele Fragen, die in den Prüfungsaktivit?ten zum Master of Wine beantwortet werden müssen, und wir k?nnen auf die Antworten zurückgreifen, um sie zu l?sen. Bei all diesen Fragen geht es um Weinkenntnisse. Wenn Sie eine Referenz ben?tigen, schauen wir uns die detaillierte Analyse der Antworten auf die Prüfungsfragen zum Yakuza 8 Wine Master an! Ausführliche Erkl?rung der Antworten auf Fragen in der Rulong 8 Wine Master-Prüfung 1. Fragen zum Thema ?Wein“. Dies ist ein destillierter Lik?r, der von einer von der k?niglichen Familie gegründeten Brennerei hergestellt wird. Er wird aus dem Zucker von Zuckerrohr gebraut, das in gro?en Mengen auf Hawaii angebaut wird. Wie hei?t dieser Wein? Antwort: Rum 2. Frage zu ?Wein“. Das Bild zeigt ein Getr?nk aus trockenem Ginseng und trockenem Wermut. Es zeichnet sich durch die Zugabe von Oliven aus und ist als ?Cockney“ bekannt.

Was soll ich tun, wenn ich Steam unter Windows 10 nicht herunterladen kann? Was soll ich tun, wenn ich Steam unter Windows 10 nicht herunterladen kann? Jul 07, 2023 pm 01:37 PM

Steam ist eine sehr beliebte Spieleplattform mit vielen hochwertigen Spielen, aber einige Win10-Benutzer berichten, dass sie Steam nicht herunterladen k?nnen. Was ist los? Es ist sehr wahrscheinlich, dass die IPv4-Serveradresse des Benutzers nicht richtig eingestellt ist. Um dieses Problem zu l?sen, k?nnen Sie versuchen, Steam im Kompatibilit?tsmodus zu installieren und dann den DNS-Server manuell auf 114.114.114.114 ?ndern. Anschlie?end sollten Sie ihn sp?ter herunterladen k?nnen. Was tun, wenn Win10 Steam nicht herunterladen kann: Unter Win10 k?nnen Sie versuchen, es im Kompatibilit?tsmodus zu installieren. Nach dem Update müssen Sie den Kompatibilit?tsmodus deaktivieren, sonst wird die Webseite nicht geladen. Klicken Sie auf die Eigenschaften der Programminstallation, um das Programm im Kompatibilit?tsmodus auszuführen. Starten Sie neu, um Speicher und Leistung zu erh?hen

L?sen Sie das Problem ?Fehler: Neudefinition der Klasse ?Klassenname'', das im C++-Code auftritt L?sen Sie das Problem ?Fehler: Neudefinition der Klasse ?Klassenname'', das im C++-Code auftritt Aug 25, 2023 pm 06:01 PM

L?sen Sie das Problem ?error:redefinitionofclass‘ClassName‘“ in C++-Code. Bei der C++-Programmierung treten h?ufig verschiedene Kompilierungsfehler auf. Einer der h?ufigsten Fehler ist ?error:redefinitionofclass ?ClassName‘“ (Neudefinitionsfehler der Klasse ?ClassName“). Dieser Fehler tritt normalerweise auf, wenn dieselbe Klasse mehrmals definiert wird. Dieser Artikel wird

So l?sen Sie das Problem, dass jQuery den Formularelementwert nicht abrufen kann So l?sen Sie das Problem, dass jQuery den Formularelementwert nicht abrufen kann Feb 19, 2024 pm 02:01 PM

Um das Problem zu l?sen, dass jQuery.val() nicht verwendet werden kann, sind spezifische Codebeispiele erforderlich. Für Front-End-Entwickler ist die Verwendung von jQuery eine der h?ufigsten Operationen. Unter diesen ist die Verwendung der .val()-Methode zum Abrufen oder Festlegen des Werts eines Formularelements eine sehr h?ufige Operation. In bestimmten F?llen kann jedoch das Problem auftreten, dass die Methode .val() nicht verwendet werden kann. In diesem Artikel werden einige g?ngige Situationen und L?sungen vorgestellt und spezifische Codebeispiele bereitgestellt. Problembeschreibung: Wenn Sie jQuery zum Entwickeln von Front-End-Seiten verwenden, treten manchmal Probleme auf

Beheben Sie den PHP-Fehler: Probleme beim Erben der übergeordneten Klasse Beheben Sie den PHP-Fehler: Probleme beim Erben der übergeordneten Klasse Aug 17, 2023 pm 01:33 PM

Beheben von PHP-Fehlern: Probleme bei der Vererbung übergeordneter Klassen In PHP ist die Vererbung ein wichtiges Merkmal der objektorientierten Programmierung. Durch Vererbung k?nnen wir vorhandenen Code wiederverwenden und ihn erweitern und verbessern, ohne den ursprünglichen Code zu ?ndern. Obwohl Vererbung in der Entwicklung weit verbreitet ist, k?nnen beim Erben von einer übergeordneten Klasse manchmal Fehler auftreten. Dieser Artikel konzentriert sich auf die L?sung h?ufiger Probleme, die beim Erben von einer übergeordneten Klasse auftreten, und stellt entsprechende Codebeispiele bereit. Frage 1: Die übergeordnete Klasse wird beim Erben der übergeordneten Klasse nicht gefunden, wenn dies nicht der Fall ist

See all articles