gpt4 book ai didi

xamarin - 防止在 XF ScrollView 中的方向更改时自动滚动到顶部

转载 作者:行者123 更新时间:2023-12-01 09:16:44 26 4
gpt4 key购买 nike

相当烦人的问题,但 ScrollView 似乎有一些默认行为,当您更改方向时,它会自动滚动到顶部。 ShouldScrollToTopUIScrollView 上可用的属性,但在 XF ScrollView 中似乎不可用。但它还是这样做了?有没有办法停下来?

最佳答案

我刚刚对此进行了快速测试,但发现它是 iOS 上的一个问题。在 Android 上, ScrollView 在旋转后没有滚动到顶部。我没有测试 UWP/WinPhone。如果仅适用于 iOS,则应针对 Xamarin.Forms 提交错误。

与此同时,这里有一个适用于 iOS 的解决方法。您将需要为您的 ScrollView 创建一个自定义渲染器 [1]。渲染器代码如下所示:

public class MyScrollViewRenderer : ScrollViewRenderer
{
CGPoint offset;

protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);

UIScrollView sv = NativeView as UIScrollView;
sv.Scrolled += (sender, evt) => {
// Checking if sv.ContentOffset is not 0,0
// because the ScrollView resets the ContentOffset to 0,0 when rotation starts
// even if the ScrollView had been scrolled (I believe this is likely the cause for the bug).
// so you only want to set offset variable if the ScrollView is scrolled away from 0,0
// and I do not want to reset offset to 0,0 when the rotation starts, as it would overwrite my saved offset.
if (sv.ContentOffset.X != 0 || sv.ContentOffset.Y != 0)
offset = sv.ContentOffset;

};
// Subscribe to the oreintation changed event.
NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("handleRotation"), new NSString("UIDeviceOrientationDidChangeNotification"), null );
}

[Export("handleRotation")]
void HandleRotation()
{
if (offset.X != 0 || offset.Y != 0) {
UIScrollView sv = NativeView as UIScrollView;
// Reset the ScrollView offset from the last saved offset.
sv.ContentOffset = offset;
}
}
}

[1] https://developer.xamarin.com/guides/xamarin-forms/custom-renderer/

关于xamarin - 防止在 XF ScrollView 中的方向更改时自动滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42033994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com