Когда вложенный просмотр, добавленный в фрейм в listview, сталкивается с исключением нулевой ссылки в xamarin.forms для ios

#listview #xamarin #xamarin.forms #xamarin.ios #frame

#listview #xamarin #xamarin.forms #xamarin.ios #фрейм

Вопрос:

Мой ListView сталкивается с исключением с нулевой ссылкой в Xamarin.Формы для iOS. В Xamarin.Forms для Android работает нормально. Теперь я использую Xamarin.Версия Forms 4.8.0.1687 (последняя стабильная версия). Раньше эта проблема работала нормально, но я использовал Xamarin.Версия Forms — 4.6.0.847. Как мне решить эту проблему?

Трассировка стека:

 at Xamarin.Forms.Platform.iOS.FrameRenderer.AddSubview (UIKit.UIView view) [0x00009] in D:a1sXamarin.Forms.Platform.iOSRenderersFrameRenderer.cs:26
at Xamarin.Forms.Platform.iOS.VisualElementPackager.OnChildAdded (Xamarin.Forms.VisualElement view) [0x00057] in D:a1sXamarin.Forms.Platform.iOSVisualElementPackager.cs:119
at Xamarin.Forms.Platform.iOS.VisualElementPackager.Load () [0x0001e] in D:a1sXamarin.Forms.Platform.iOSVisualElementPackager.cs:49
at Xamarin.Forms.Platform.iOS.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x0012e] in D:a1sXamarin.Forms.Platform.iOSVisualElementRenderer.cs:283
at Xamarin.Forms.Platform.iOS.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.iOS.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00000] in D:a1sXamarin.Forms.Platform.iOSVisualElementRenderer.cs:158
at Xamarin.Forms.Platform.iOS.RendererPool.GetFreeRenderer (Xamarin.Forms.VisualElement view) [0x00048] in D:a1sXamarin.Forms.Platform.iOSRendererPool.cs:44
at Xamarin.Forms.Platform.iOS.RendererPool.FillChildrenWithRenderers (Xamarin.Forms.VisualElement element) [0x00035] in D:a1sXamarin.Forms.Platform.iOSRendererPool.cs:117
at Xamarin.Forms.Platform.iOS.RendererPool.UpdateNewElement (Xamarin.Forms.VisualElement newElement) [0x000ae] in D:a1sXamarin.Forms.Platform.iOSRendererPool.cs:77
at Xamarin.Forms.Platform.iOS.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00037] in D:a1sXamarin.Forms.Platform.iOSVisualElementPackager.cs:205
at Xamarin.Forms.Platform.iOS.VisualElementPackager.OnRendererElementChanged (System.Object sender, Xamarin.Forms.Platform.iOS.VisualElementChangedEventArgs args) [0x0000f] in D:a1sXamarin.Forms.Platform.iOSVisualElementPackager.cs:186
at Xamarin.Forms.Platform.iOS.VisualElementRenderer`1[TElement].OnElementChanged (Xamarin.Forms.Platform.iOS.ElementChangedEventArgs`1[TElement] e) [0x00020] in D:a1sXamarin.Forms.Platform.iOSVisualElementRenderer.cs:395
at Xamarin.Forms.Platform.iOS.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x00172] in D:a1sXamarin.Forms.Platform.iOSVisualElementRenderer.cs:296
at Xamarin.Forms.Platform.iOS.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.iOS.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00000] in D:a1sXamarin.Forms.Platform.iOSVisualElementRenderer.cs:158
at Xamarin.Forms.Platform.iOS.ListViewRenderer UnevenListViewDataSource.CalculateHeightForCell (UIKit.UITableView tableView, Xamarin.Forms.Cell cell) [0x00035] in D:a1sXamarin.Forms.Platform.iOSRenderersListViewRenderer.cs:946
at Xamarin.Forms.Platform.iOS.ListViewRenderer UnevenListViewDataSource.GetEstimatedRowHeight (UIKit.UITableView table) [0x0008c] in D:a1sXamarin.Forms.Platform.iOSRenderersListViewRenderer.cs:875
at Xamarin.Forms.Platform.iOS.ListViewRenderer UnevenListViewDataSource.UpdateEstimatedRowHeight (UIKit.UITableView tableView) [0x00000] in D:a1sXamarin.Forms.Platform.iOSRenderersListViewRenderer.cs:886
at Xamarin.Forms.Platform.iOS.ListViewRenderer ListViewDataSource.DetermineEstimatedRowHeight () [0x00009] in D:a1sXamarin.Forms.Platform.iOSRenderersListViewRenderer.cs:1338
at Xamarin.Forms.Platform.iOS.FormsUITableViewController.ViewWillLayoutSubviews () [0x00000] in D:a1sXamarin.Forms.Platform.iOSRenderersListViewRenderer.cs:1681
at (wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Library/Frameworks/Xamarin.iOS.framework/Versions/14.4.1.3/src/Xamarin.iOS/UIKit/UIApplication.cs:86
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0000e] in /Library/Frameworks/Xamarin.iOS.framework/Versions/14.4.1.3/src/Xamarin.iOS/UIKit/UIApplication.cs:65
at 
 
 <ListView.HeaderTemplate>
    <DataTemplate>
        <ContentView>
            <!--Sample Content-->
            <StackLayout Orientation="Horizontal" Margin="0,0,0,10" VerticalOptions="FillAndExpand" HorizontalOptions="EndAndExpand">
                <ImageButton Source="test.png"  HeightRequest="32"  WidthRequest="32" />
            </StackLayout>
        </ContentView>
    </DataTemplate>
</ListView.HeaderTemplate>

<ListView.GroupHeaderTemplate>
    <DataTemplate>
        <ViewCell>
            <Frame CornerRadius="3" Margin="0,0,0,3" x:Name="frame" Padding="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" HasShadow="False">
                <Grid   HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <!--Sample Content-->
                    <StackLayout Orientation="Horizontal" Margin="0,0,0,10" VerticalOptions="FillAndExpand" HorizontalOptions="EndAndExpand">
                        <ImageButton Source="test1.png"  HeightRequest="32"  WidthRequest="32" />
                    </StackLayout>
                </Grid>
            </Frame>
        </ViewCell>
    </DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
    <DataTemplate>
        <local:CustomCell  >
            <ContentView>
                <Frame CornerRadius="3"   HasShadow="False" Margin="1,1,1,1" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                    <Grid HorizontalOptions="FillAndExpand"  VerticalOptions="FillAndExpand" Padding="8" >

                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <!--Sample Content-->
                        <StackLayout Orientation="Horizontal" Margin="0,0,0,10" VerticalOptions="FillAndExpand" HorizontalOptions="EndAndExpand">
                            <ImageButton Source="sample.png"  HeightRequest="32"  WidthRequest="32" />
                        </StackLayout>
                    </Grid>
                </Frame>
            </ContentView>
        </local:CustomCell>
    </DataTemplate>
</ListView.ItemTemplate>
 

Комментарии:

1. мы не можем помочь отлаживать код, который мы не видим

2. Поскольку он работает в более старой версии, вы могли бы сначала очистить папку bin и obj, а затем перестроить свой проект. Если это все еще не работает, вы можете поделиться своим образцом с github, чтобы я мог протестировать его на своей стороне 🙂