[英]Xamarin.IOS Prevent scrolling to bottom on select
(渲染逻辑来自此SO帖子中的以下答案: 选择文本并从标签xamarin形式复制 )
我遇到一个问题,即我拥有的只读编辑器在iOS中表现出奇怪的行为。 当我突出显示一个项目时,它会先滚动到底部,然后在我选择要突出显示的文本时又滚动回到中间。 但是,第一次执行此操作后,它将不再再次执行此操作(这很好)。 但是,当您进入局部视图时,它总是第一次这样做一次。 这一切都始于我们遇到了一个错误,即用户无法选择要复制和粘贴的文本,该错误已修复,但现在iOS正在显示此问题。
这是自定义Editor类:
public partial class BorderlessReadOnlyEditor : Editor {
}
这是渲染器:
public class BorderlessReadOnlyEditorRenderer : EditorRenderer {
protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
base.OnElementChanged(e);
if (Control == null) return;
Control.Selectable = true;
Control.Editable = false;
Control.ScrollEnabled = false;
Control.TextContainerInset = UIEdgeInsets.Zero;
Control.TextContainer.LineFragmentPadding = 0;
}
}
XAML如下,我将视图(DetailComponent)渲染为DetailPage的一部分,如下所示:
<StackLayout
Margin="20, 0, 20, 0"
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand">
<views:DetailComponent />
<views:DetailComponent x:Name="Details"/>
</StackLayout>
然后在DetailView本身内部,我要显示用户之前保存的文本的区域如下:
<ScrollView
x:Name="BodyScroller"
x:FieldModifier="Public"
Margin="0, 0, 0, 30"
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand" >
<Label
<customcontrols:BorderlessReadOnlyEditor
x:Name="BodyLabel"
x:FieldModifier="Public"
Text="{Binding SelectedNote.Body}"
TextColor="Black"
FontSize="16"
VerticalOptions="StartAndExpand"
HorizontalOptions="StartAndExpand"/>
</ScrollView>
如果我还需要显示背后的代码,请告诉我。 我真的很希望能够尽可能地防止任何自动滚动行为。 最初它是一个标签,但是据我所知,在Xamarin中,如果它是标签,则很难让UI文本突出显示和复制
因此,解决方案是双重的
然后,在代码中,我必须在DetailComponent.xaml.cs中手动设置BodyLabel(自定义编辑器)的高度,该高度包含编辑器,如下所示:
公共局部类DetailComponent:StackLayout {public DetailComponent(){InitializeComponent();
if (Device.Idiom == TargetIdiom.Phone) { this.BodyLabel.HeightRequest = DeviceDisplay.MainDisplayInfo.Height * 0.25; } else { this.BodyLabel.HeightRequest = DeviceDisplay.MainDisplayInfo.Height * 0.33; } } }
这些百分比旨在确保滚动,因为我们在顶部具有标准标头大小(因此,对于此特定用例,如果此答案对您有帮助,则可能需要对其进行修改)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.