将子视图内容添加为 ScrollView 说明代码重现步骤预期行为实际行为基本信息输出视频示例链接

问题描述

说明

在 Xamarin.Forms iOS 中将子视图内容添加为 ScrollView 时,在平移 y 位置后,AbsoluteLayout 子布局边界未正确更新。

代码

[XAML]

    <AbsoluteLayout AbsoluteLayout.LayoutBounds="0,1,1" AbsoluteLayout.LayoutFlags="SizeProportional"
                    HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="LightBlue">
    <local:CustomView x:Name="viewcustom" AbsoluteLayout.LayoutFlags="SizeProportional" 
                    AbsoluteLayout.LayoutBounds="0,1" BackgroundColor="LightGray">
            <ScrollView x:Name="scrollView" >
            <StackLayout BackgroundColor="Red">
                <Button Margin="10" Text="Button 1" />
                <Button Margin="10" Text="Button 2" />
                <Button Margin="10" Text="Button 3"/>
                <Button Margin="10" Text="Button 4"/>
                <Button Margin="10" Text="Button 5"/>
                <Button Margin="10" Text="Button 6"/>
                <Button Margin="10" Text="Button 7"/>
                <Button Margin="10" Text="Button 8"/>
                <Button Margin="10" Text="Button 9"/>
                <Button Margin="10" Text="Button 10"/>
                <Button Margin="10" Text="Button 11"/>
                <Button Margin="10" Text="Button 12"/>
                <Button Margin="10" Text="Button 13"/>
                <Button Margin="10" Text="Button 14"/>
                <Button Margin="10" Text="Button 15"/>
            </StackLayout>
        </ScrollView>
 </local:CustomView>
    </AbsoluteLayout>

[CustomVieWrenderer.cs]

    private void OnPanning()
    {
        var currentY = this.panGesture.TranslationInView(this).Y;
        Double screenHeigth = Devicedisplay.MaindisplayInfo.Height / Devicedisplay.MaindisplayInfo.Density;

        switch (this.panGesture.State)
        {
            case UIGestureRecognizerState.Changed:
                DependencyService.Get<IAnimate>().TranslateYTo(this.view,this.prevTranslatedY,currentY,300);
                UpdateHeight(currentY,0);
                break;

            case UIGestureRecognizerState.Ended:
                ...
                DependencyService.Get<IAnimate>().TranslateYTo(this.view,0);
                ...
                break;
        }
    }
    private void UpdateHeight(double y,double viewY) //&& this.backdrop.IsBackLayerRevealed && !isPanningEnabled
    {
        Double screenHeigth = Devicedisplay.MaindisplayInfo.Height / Devicedisplay.MaindisplayInfo.Density;
        var heightPercentage = (screenHeigth - y) / screenHeigth;
        Xamarin.Forms.AbsoluteLayout.SetLayoutBounds(view,new Xamarin.Forms.Rectangle(0,viewY,heightPercentage));
    }

重现步骤

  1. 选择按钮 1,然后向下拖动。
  2. 然后选择相同的按钮并向上拖动。

预期行为

鼠标点拖动视图

实际行为

由于边界未正确更新,视图无法用鼠标拖动。

基本信息

VS 2019 测试设备:iPhone模拟器 XF 版本:4.8

输出视频

OutputVideo.zip

示例链接

AbsoluteLayoutContentScrollDemo.zip

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...