2017-09-26 209 views
0

我的頁面看起來就像這個頁面上啓用滾動:時顯示鍵盤

enter image description here

如果用戶關注的焦點中的一個條目,頁面被「鎖定」。或者,因爲它遵循用戶不能上下移動:

enter image description here

我用ContentPage與滾動型爲主的佈局。 我也試着在各種模式下設置Window.SetSoftInputMode(),但一切都保持不變。

是否有任何模塊化的方法來解決這個問題(當HeightRequest = 0時,我有一個StackLayout的解決方法,當其中一個條目聚焦時,我將HeightRequest更改爲鍵盤高度)?

更新 我實現了這個,因爲它如下:
添加新的自定義控制CustomEntry這基本上是入學:只

<?xml version="1.0" encoding="UTF-8"?> 
    <Entry xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="MyApp.Framework.Controls.CustomEntry" 
      TextColor="{StaticResource MainPurple}" 
      PlaceholderColor="{StaticResource MainPurpleLight}" 
      HeightRequest="45" 
      FontSize="14" 
      Focused="CustomEntryFocused" 
      Unfocused="CustomEntryUnfocused">  
    </Entry> 

private void CustomEntryFocused(object sender, FocusEventArgs e) 
     { 
      var stackParent = StackParent as StackLayout; 
      stackParent?.Children.Add(new StackLayout() { HeightRequest = `KeyboardHeight });` 
     } 

private void CustomEntryUnfocused(object sender, FocusEventArgs e) 
{ 
    var stackParent = StackParent as StackLayout;    
    stackParent?.Children.RemoveAt(stackParent.Children.Count - 1); 
} 

回答

0

使用Xam.Plugins.Forms.KeyboardOverlap插件,在您的iOS項目(不PCL,沒有安卓)和你的iOS項目電話:

Xamarin.Forms.Init();//platform specific init 
KeyboardOverlapRenderer.Init(); 

你必須這樣做後,您撥打Xamarin.Forms.Init().

enter image description here

這裏有一個例子:https://github.com/paulpatarinski/Xamarin.Forms.Plugins/tree/master/KeyboardOverlap/SampleApp

+0

我一直在尋找一個模塊化的解決方案,沒有/或最少的代碼在渲染器和一般的本地項目。我要用我的解決方案更新這篇文章。謝謝! – zpouip

0

使用下面的代碼,您也可以手動滾動你的頁面

void EntryKeyboardHandle_Focused(object sender, Xamarin.Forms.FocusEventArgs e) 
     { 
      Device.BeginInvokeOnMainThread(async() => 
      { 
       var height = SignupGrid.Height; 
       await MainScroll.ScrollToAsync(0, height, true); 
      }); 
     } 

你需要把你的網格或stacklayout在滾動視圖,並把焦點入境事件。

Focused="EntryKeyboardHandle_Focused" 
+0

這不是模塊化的,我每次使用這個條目都必須更改代碼,但是你給了我一個想法如何在Forms項目中實現它,而不需要在自定義渲染器中添加任何代碼。謝謝! – zpouip