indubitablee
indubitablee

Reputation: 8206

Xamarin Forms Disable ListView Load Animation

<ListView x:Name="myList" ItemTapped="OnMyItemTapped" ItemsSource="{Binding myList}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.View>
                    <StackLayout> CONTENT HERE </StackLayout>
                </ViewCell.View>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

where myList is an ObservableCollection

Desired: Displays all list items immediately at once without animation

Actual: Displays list items one at a time (similar to the add item animation)

Any ideas?

(This sequential displaying of items is significantly more noticeable when the list of items within the list view is larger)

Upvotes: 2

Views: 1839

Answers (2)

greg84
greg84

Reputation: 7609

You can use a platform specific property to disable animations:

<ContentPage ...
             xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core">
    <StackLayout Margin="20">
        <ListView ios:ListView.RowAnimationsEnabled="false">
        </ListView>
    </StackLayout>
</ContentPage>

Read more here: https://learn.microsoft.com/en-us/xamarin/xamarin-forms/platform/ios/listview-row-animations

Upvotes: 1

Devlin Paddock
Devlin Paddock

Reputation: 172

The only way I've found to do it is to use a custom renderer.
These are the lines I'm using to disable the insert, delete and reload rows animations:

if (e.OldElement != null)
{
    InsertRowsAnimation = UITableViewRowAnimation.None;
    DeleteRowsAnimation = UITableViewRowAnimation.None;
    ReloadRowsAnimation = UITableViewRowAnimation.None;
}

This needs to be placed in your CustomListViewRenderer that is inheriting from Xamarin forms ListViewRenderer.
I put mine in the OnElementChanged event.

Upvotes: 1

Related Questions