在我的内容页面中,我有这样的XAML:
<TableView HasUnevenRows="True" Intent="Form">
<TableRoot>
<TableSection>
<!-- Height is set intentionally for demo purposes -->
<ViewCell Height="110">
<ScrollView>
<Editor>
<Editor.Text>
1
2
3
4
5
6
7
8
9
</Editor.Text>
</Editor>
</ScrollView>
</ViewCell>
</TableSection>
</TableRoot>
</TableView>
问题是:编辑器中的文本不滚动,即我可以看到一些文本行(6 7 8 9),但是无法滚动到其他行。在iOS上运作良好。删除ScrollView没有帮助。将 HeightRequest 设置为ScrollView或Editor-没有帮助。
在Table和ViewCell之外具有长文本的编辑器完全可以正常工作。
我做错什么了吗?有解决方案,还是这种缺乏行为的设计?
P.S。我想在这里使用StackLayout,但是由于这个示例之外的许多原因,我必须使用带有单元格的表。
答案 0 :(得分:1)
它不滚动的原因是因为TableView内的ScrollView放置了一个堆栈布局
Xamarin Forms TableView默认具有滚动,您无需手动添加
删除ScrollView将解决您的问题
更新
如果这不起作用,则可能需要做一些自定义渲染,因为需要使用Android多行edittext来产生表格视图
[assembly:ExportRenderer(typeof(Editor),typeof(MyEditorRenderer))]
namespace YourNameSpace
{
public class MyEditorRenderer : EditorRenderer
{
public MyEditorRenderer(Context context) : base(context)
{
}
public override bool DispatchTouchEvent(MotionEvent e)
{
int x = (int)e.GetX();
int y = (int)e.GetY();
switch (e.Action)
{
case MotionEventActions.Down:
{
Parent.RequestDisallowInterceptTouchEvent(true);
break;
}
case MotionEventActions.Move:
{
break;
}
case MotionEventActions.Up:
{
break;
}
default:
break;
}
return base.DispatchTouchEvent(e);
}
}
}
答案 1 :(得分:0)
每当必须在滚动容器中找到编辑器时,请将渲染器添加到Android项目:
using Android.Views;
using MyApp.Droid.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(Editor), typeof(ScrollForcingEditorRenderer))]
namespace MyApp.Droid.Renderers
{
/// <summary>
/// This class is used to force scrolling of Editor in Android
/// when Editor is located within scrollable container.
/// </summary>
/// <seealso cref="EditorRenderer" />
public class ScrollForcingEditorRenderer : EditorRenderer
{
public override bool DispatchTouchEvent(MotionEvent e)
{
if (e.Action == MotionEventActions.Down)
{
// prevent sending scroll event to parent container
Parent.RequestDisallowInterceptTouchEvent(true);
}
return base.DispatchTouchEvent(e);
}
}
}