c# - Xamarin CollectionView 缓慢滚动

标签 c# performance xamarin xamarin.forms collectionview

我有一个显示聊天消息的集合 View ,它有 10 个可能的数据模板。每个数据模板都包含一个 flexlayout(因为我需要在左侧或右侧水平对齐它,就像聊天气泡一样),在这些 flexlayouts 中,我们有一个单独的网格,可以显示图像、标签、 map 或媒体播放器。它加载非常快,但滚动时非常慢。我试图取消 flexlayout,但网格不遵守我需要的 LayoutOptions End/Start,然后我用填充屏幕(水平)的 ContentView 交换了 FlexLayout,我能够水平对齐它的 child 。我注意到此更改没有性能改进,甚至可能变得更糟。此外,我已阅读并按照 Optimizing App Performance 的建议进行了更改。但似乎还不够。

下面我有我的collectionview标签和一个数据模板的例子,其他的非常相似,几乎没有区别。我的疑问是如何改进这种情况?

收藏查看

<CollectionView x:Name="ChatCollectionView" SelectionMode="None" HorizontalScrollBarVisibility="Never" VerticalScrollBarVisibility="Always" ItemsUpdatingScrollMode="KeepLastItemInView" ItemTemplate="{StaticResource MsgTemplateSelector}" Margin="5,0,5,0" />

数据模板之一
<DataTemplate x:Key="DefaultMsg">
    <FlexLayout Direction="Row" MinimumWidthRequest="50" JustifyContent="{Binding MsgAlign}">
            <Grid Padding="0" Margin="0,10,0,0">
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition Height="20"></RowDefinition>
                </Grid.RowDefinitions>

                <BoxView Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="0" Grid.RowSpan="2" CornerRadius="5" BackgroundColor="{Binding MsgBg}" />
                <Label Grid.Row="0" Grid.Column="0" Text="{Binding msg}" TextColor="Black" />

                <Grid Grid.Row="1" Grid.Column="0">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="20" />
                    </Grid.ColumnDefinitions>

                    <Label Grid.Column="0" Grid.Row="0" TextColor="DarkGray" FontSize="12">
                        <Label.FormattedText>
                            <FormattedString>
                                <Span Text="&#xf017; ">
                                    <Span.FontFamily>
                                        <OnPlatform x:TypeArguments="x:String" Android="Font-Awesome-Free-Solid.otf#FontAwesome5Free-Solid" iOS="FontAwesome5Free-Solid" />
                                    </Span.FontFamily>
                                </Span>
                                <Span Text="{Binding date}" />
                                <Span Text=" at " />
                                <Span Text="{Binding hour}" />
                            </FormattedString>
                        </Label.FormattedText>
                    </Label>

                    <ActivityIndicator Grid.Column="1" Grid.Row="0" Color="#ff9000" HeightRequest="15" WidthRequest="15" IsRunning="{Binding sending}" IsVisible="{Binding sending}" HorizontalOptions="End" />
                    <Label Grid.Column="1" Grid.Row="0" Text="{Binding icon}" IsVisible="{Binding sent}" TextColor="{Binding IconColor}" FontSize="15" HorizontalOptions="End">
                        <Label.FontFamily>
                            <OnPlatform x:TypeArguments="x:String" Android="Font-Awesome-Free-Solid.otf#FontAwesome5Free-Solid" iOS="FontAwesome5Free-Solid" />
                        </Label.FontFamily>
                    </Label>
                </Grid>
            </Grid>
    </FlexLayout>
</DataTemplate>

最佳答案

在我的情况下,问题出在跨度上,我删除并放置了一个普通标签。我的卷轴又开始流动了。

关于c# - Xamarin CollectionView 缓慢滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62097907/

相关文章:

c# - LINQ OrderBy 自定义订单

java - 将对象添加到 HashSet

javascript - Xamarin WebView - 无法禁用双击事件

java - Android ImageView 动画很慢

java - 查找数组中以特定数字开头的数字

ios - Xamarin ios 如何在编辑时制作一个自适应大小的 UITableViewCell

c# - Xamarin IOS 加载 View 表单手势事件

c# - 构建执行另一个表达式的表达式

c# - 一次通话即可获取 Facebook 用户的详细信息和大头像

c# - 将 foreach 循环更改为 Parallel.ForEach 和奇怪的错误