Xamarin.Forms ScrollView not showing all content when elements IsVisible property changes

Jalza 781 Reputation points
2021-11-10T10:59:24.003+00:00

I'm having a problem with ScrollView when I change the IsVisible property of a view that is inside. This example is very easy to reproduce. I have a Switch and a Label inside a ScrollView. At start you can scroll down and see the complete text. If you toogle the Switch the text is hided. If you toogle again the text is visible again. But if you scroll down, you can see that the text below is not rendered. With this code, you can reproduce the problem in Android (I didn't test it in iOS):

MainPage.xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="ScrollAndHideText.MainPage">
    <ScrollView>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid Grid.Row="0" Padding="5">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Margin="20,10" Text="Show text"/>
                <Switch Grid.Column="0" Margin="20,10" IsToggled="True" Toggled="SwitchToggled"/>
            </Grid>
            <Grid x:Name="hidedGrid" Grid.Row="1" Padding="5">
                <Label Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
                       Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
                       in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, 
                       sunt in culpa qui officia deserunt mollit anim id est laborum."
                       FontSize="Medium"/>
            </Grid>
        </Grid>
    </ScrollView>
</ContentPage>

MainPage.xaml.cs:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void SwitchToggled(object sender, ToggledEventArgs e)
    {
        this.hidedGrid.IsVisible = e.Value;
    }
}

Why is this happening?

Edit:

I'm using Xamarin.Forms V5.0.0.2196, testing on Samsung Galaxy A8 with Android 9. Here is what it happening:
bo9ELXv

Developer technologies | .NET | Xamarin
{count} votes

Accepted answer
  1. Anonymous
    2021-11-17T09:10:32.733+00:00

    Hello,​

    Welcome to our Microsoft Q&A platform!

    I tried with your demo. Please use Stacklayout to wrap the ScrollView like following layout. this issue is disappear in my side.

       <StackLayout>  
           <ScrollView>  
               <Grid>  
                   <Grid.RowDefinitions>  
                       <RowDefinition Height="Auto"/>  
                       <RowDefinition Height="Auto"/>  
                   </Grid.RowDefinitions>  
                   <Grid Grid.Row="0" Padding="5">  
                       <Grid.ColumnDefinitions>  
                           <ColumnDefinition Width="*"/>  
                           <ColumnDefinition Width="Auto"/>  
                       </Grid.ColumnDefinitions>  
                       <Label Grid.Column="0" Margin="20,10" Text="Show text"/>  
                       <Switch Grid.Column="0" Margin="20,10" IsToggled="True" Toggled="SwitchToggled"/>  
                   </Grid>  
                   <Grid x:Name="hidedGrid" Grid.Row="1" Padding="5" PropertyChanged="hidedGrid_PropertyChanged">  
                       <Label Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.   
                              Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor   
                              in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,   
                              sunt in culpa qui officia deserunt mollit anim id est laborum.   
                              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.   
                              Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor   
                              in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,   
                              sunt in culpa qui officia deserunt mollit anim id est laborum.   
                              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.   
                              Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor   
                              in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,   
                              sunt in culpa qui officia deserunt mollit anim id est laborum.   
                              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.   
                              Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor   
                              in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,   
                              sunt in culpa qui officia deserunt mollit anim id est laborum.   
                              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.   
                              Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor   
                              in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,   
                              sunt in culpa qui officia deserunt mollit anim id est laborum."  
                              FontSize="Medium"/>  
                   </Grid>  
               </Grid>  
           </ScrollView>  
           </StackLayout>  
    

    Best Regards,

    Leon Lu


    If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".

    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

    1 person found this answer helpful.

0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.