You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI CollectionView分组列表在iOS平台显示不全且刷新时崩溃的问题求助

.NET MAUI CollectionView分组列表在iOS平台显示不全且刷新时崩溃的问题求助

大家好,我最近在开发.NET MAUI应用时遇到了一个iOS平台特有的棘手问题,安卓端一切功能都正常,但iOS这边分组的CollectionView表现异常,想请各位帮忙分析解决。

问题详情

  • 受影响平台:仅iOS,安卓平台完全正常
  • 显示问题:分组列表数据显示不全,比如我有12个Primary Buddies的数据,但iOS上只显示3个
  • 崩溃问题:当触发下拉刷新或者更新UI时,应用直接崩溃,而且这个问题只有在启用分组(使用GroupHeaderTemplate)时才会出现,如果移除GroupHeaderTemplate,崩溃就不会发生,但分组功能也没了

相关代码

XAML代码

<ActivityIndicator Color="#1c98d7" x:Name="progress_indicator" IsVisible="false" />
<RefreshView IsRefreshing="{Binding IsRefreshing}" Command="{Binding RefreshCommand}">
    <CollectionView x:Name="friendlistview" IsGrouped="{Binding IsGrouped}" VerticalOptions="FillAndExpand" BackgroundColor="White" SelectionMode="None">
        <CollectionView.GroupHeaderTemplate>
            <DataTemplate>
                <StackLayout Padding="10" Spacing="0">
                    <Label Text="{Binding GroupName}" FontAttributes="Bold" Padding="10" Margin="0,0,0,5" TextColor="Black" Style="{StaticResource FriendNameLabelStyle}" />
                    <BoxView HeightRequest="{OnIdiom Phone=3, Tablet=5, Desktop=3}" Color="#e6e6e6" Margin="5,0,10,0" HorizontalOptions="Fill"/>
                </StackLayout>
            </DataTemplate>
        </CollectionView.GroupHeaderTemplate>
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <StackLayout Orientation="Horizontal" Padding="5">
                    <StackLayout.GestureRecognizers>
                        <TapGestureRecognizer Tapped="friendlistview_ItemSelected" NumberOfTapsRequired="1" />
                    </StackLayout.GestureRecognizers>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="12.25*" />
                        </Grid.ColumnDefinitions>
                        <!-- Buddy label/image views -->
                    </Grid>
                    <StackLayout>
                        <!-- Additional labels -->
                    </StackLayout>
                </StackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</RefreshView>

C#分组逻辑

var groupedFriendsList = new ObservableCollection<GroupedFriends>();
var primaryGroup = friendsList.Where(f => f.groupType == "monitor.group").ToList();
var secondaryGroup = friendsList.Where(f => f.groupType == "secondary.monitor.group").ToList();

if (primaryGroup.Any())
    groupedFriendsList.Add(new GroupedFriends("Primary Buddies", primaryGroup));
if (secondaryGroup.Any())
    groupedFriendsList.Add(new GroupedFriends("Secondary Buddies", secondaryGroup));

friendlistview.ItemsSource = groupedFriendsList;

分组模型

public class GroupedFriends : ObservableCollection<UserFriendHBList>
{
    public string GroupName { get; set; }

    public GroupedFriends(string groupName, IEnumerable<UserFriendHBList> friends) : base(friends)
    {
        GroupName = groupName;
    }
}

我尝试过的方案

  • 确认数据源没问题,调试时能看到确实有12个Primary Buddies的数据
  • 移除GroupHeaderTemplate后,应用不再崩溃,但分组功能丢失,不符合需求
  • 安卓端使用完全相同的逻辑,所有功能都正常运行

有没有朋友遇到过类似的问题?或者能给我一些排查方向和解决方案?非常感谢!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:29:30