Scroll-Editor in Xamarin-Formularen in Ansicht

8

Unter Verwendung von Xamarin-Formularen betrachten Sie den unten stehenden Xaml.

%Vor%

Dies rendert ein Bild, einen Editor und eine Schaltfläche zum Speichern. Das Bild ist im 4x3 Bildverhältnis und deckt etwa ein Drittel der verfügbaren Bildschirmhöhe ab. Der Editor wird unten gerendert.

Das Problem ist, dass die Tastatur den Editor in iOS abdeckt. Ein Standard-iOS-Problem normalerweise.

Die Frage ist: Wie kann Xamarin Forms damit umgehen?

Danke

// Johan

    
Johan Karlsson 22.06.2014, 16:16
quelle

6 Antworten

6

Um automatisches Scrollen für Editoren und Einträge mit Xamarin.Forms zu erhalten, müssen Sie normalerweise Ihre Ansicht, in diesem Fall das StackLayout, in eine ScrollView packen:

%Vor%

So sollte es funktionieren, aber ab heute (Juni 2014) gibt es einen Fehler, der verhindert, dass dies vollständig mit dem Editor funktioniert (es funktioniert gut mit Einträgen). Das Problem ist bekannt und wird bearbeitet.

[UPDATE 2014-11-20] Das Problem wurde behoben und wird in der nächsten Version von XF 1.3 verfügbar sein.

    
Stephane Delcroix 22.06.2014, 18:24
quelle
10

Ich bin gerade über diese Frage gestolpert, als ich eine winzige Chat-Anwendung geschrieben habe, die im Grunde eine scrollbare Nachrichtenliste, einen Texteintrag und eine Senden-Schaltfläche enthält:

Das Problem mit der zuvor veröffentlichten Lösung besteht darin, dass Sie zwei Scroll-Ansichten verschachteln müssen, was von Xamarin.Forms-Dokumentation . Um zu verhindern, dass die Tastatur den Eintrag versteckt, habe ich folgenden Hack gefunden:

Ich füge ein placeholder am Ende des Haupt-Stack-Layouts hinzu. Abhängig davon, ob der Eintrag fokussiert ist (d. H. Die Tastatur ist sichtbar oder nicht), wird die Höhe des Platzhalters auf 0 oder die Tastaturhöhe gesetzt.

%Vor%

Natürlich ist das nicht perfekt. Vor allem die hart codierte Tastaturhöhe sollte eleganter implementiert werden. Und wahrscheinlich sollten Sie es nur auf iOS anwenden, nicht auf Android.

    
Falko 21.08.2014 08:43
quelle
5

Manchmal können Sie Ihre Hauptansicht nicht in eine Scrollview einfügen. In diesen Fällen können Sie dies implementieren, indem Sie die Tastaturereignisse des iOS-Projekts behandeln und sie an die Forms-Ebene übergeben. Android kümmert sich um sich selbst.

%Vor%

Dann auf der Formularebene:

%Vor%

Wenn Sie in einem Stacklayout arbeiten und die Ansicht über der Tastatur anheben möchten, können Sie einen Abstandhalter mit einer Höhe von 0 an der Unterseite des Stapels platzieren. Stellen Sie es dann auf die Höhe der Tastatur ein, wenn das Ereignis "Keyboard Changed" ausgelöst wird.

%Vor%

Wenn Sie mit einem Listview arbeiten, können Sie damit umgehen, indem Sie Ihre Ansicht um den Betrag überlagern, mit dem sie überlappen würden.

%Vor%

Listviews müssen anders gehandhabt werden, da die Höhe automatisch von Forms angepasst wird und ein Abstandhalterergebnis zur Korrektur verwendet wird.

Beispiel hier: Ссылка

    
Daniel Roberts 28.07.2015 17:23
quelle
1

Erweitern Sie die Antwort von @Falko. Sie können die Plattform für iOS überprüfen, da Android dies erwartungsgemäß nativ behandelt.

Ich habe dies auch über diese Antwort auf die Seite zur schnellen und schmutzigen Ausrichtung hinzugefügt.

%Vor%

Jedenfalls verstehe ich, dass Xamarin demnächst einige Lösungen dafür hinzufügen wird. Für jetzt, aber ...

%Vor%     
Timothy Lee Russell 08.01.2015 05:06
quelle
0

Sei vorsichtig, raisekeyboard wurde nur für einen Eintrag in der Anwendung implementiert, wenn du einen neuen Eintrag hinzufügst, wird KeyboardHelper.KeyboardChanged schießen, wenn der Fokus auf irgendeinem Eintrag liegt.

%Vor%     
Pedro Danilo Lima Jesus 09.06.2016 19:05
quelle
0

Die Verwendung von ScrollView, wie oben erwähnt, behebt Probleme in iOS und teilweise Korrekturen in Android. Um das Problem in Android vollständig zu beheben, fand ich eine andere einfache und nette Ergänzung.

Nur in Android ersetze ich Xamarin Forms Editor mit Android-spezifischen TextEdit-Steuerelement. Also habe ich in meinem Page-Konstruktor folgenden Code nur für Android.

%Vor%

Sie müssen auch androidspezifische Namespaces nach Bedarf hinzufügen.

%Vor%     
Waqas 31.10.2017 10:32
quelle