ListView with a TemplateSelector crashes on iOS 16 device!
<telerik:RadListView ItemTemplate="{StaticResource ActTempSelector}" ItemsSource="{Binding Suggestions}">
</telerik:RadListView>
log output is the following:
2022-10-08 20:44:46.810 Xamarin.PreBuilt.iOS[1593:343579] *** NSForwarding: warning: object 0x281edbea0 of class 'Telerik_Maui_Controls_Compatibility_DataControlsRenderer_iOS_TKExtendedListView' does not implement methodSignatureForSelector: -- trouble ahead
2022-10-08 20:44:46.810 Xamarin.PreBuilt.iOS[1593:343579] *** NSForwarding: warning: object 0x281edbea0 of class 'Telerik_Maui_Controls_Compatibility_DataControlsRenderer_iOS_TKExtendedListView' does not implement doesNotRecognizeSelector: -- abort
if you start to reorder an item, and then drop it in the same position that it already had (i.e. abort/cancel the reorder) , the gray color is now stuck. The issue happens only on Android.
When the VerticalItemSpacing is greater than 1 and an ItemStyle with a Border is defined the background of the item is overlapping the border.
<telerik:RadListView Grid.Column="0" ItemsSource="{Binding Source}">
<telerik:RadListView.LayoutDefinition>
<telerik:ListViewLinearLayout Orientation="Vertical" VerticalItemSpacing="4" />
</telerik:RadListView.LayoutDefinition>
<telerik:RadListView.ItemStyle>
<telerik:ListViewItemStyle
BackgroundColor="Green"
BorderColor="LightGreen"
BorderLocation="All"
BorderWidth="1" />
</telerik:RadListView.ItemStyle>
<telerik:RadListView.SelectedItemStyle>
<telerik:ListViewItemStyle
BackgroundColor="Orange"
BorderColor="OrangeRed"
BorderLocation="All"
BorderWidth="1" />
</telerik:RadListView.SelectedItemStyle>
<telerik:RadListView.PressedItemStyle>
<telerik:ListViewItemStyle
BackgroundColor="Orange"
BorderColor="OrangeRed"
BorderLocation="All"
BorderWidth="1" />
</telerik:RadListView.PressedItemStyle>
<telerik:RadListView.ItemTemplate>
<DataTemplate x:DataType="local:SourceItem">
<telerik:ListViewTemplateCell>
<telerik:ListViewTemplateCell.View>
<Grid>
<Label Margin="10" Text="{Binding Name}" />
</Grid>
</telerik:ListViewTemplateCell.View>
</telerik:ListViewTemplateCell>
</DataTemplate>
</telerik:RadListView.ItemTemplate>
</telerik:RadListView>
windows device with touch capabilities/monitor with touch -> the listview swipes and shows the swipe template, however pressing the button in the swipe or attempting to close the swipe makes the swipe content disappear and the entry to remain in the swiped position.Also multiple swipes are allowed. The swipe cannot be ended, etc.
Using the mouse - > swiping works as expected.
The issue occurs on iOS version > 16.
It took me about 2 days, but finally i've reached out a repo out of the real world app, where the iOS RadListView crashes the app.
Start this repo app on a iPhone 15 Simulator:
https://github.com/baaaaif/TelerikListViewCrash
The ListView crashes the app when the cell is quite high and the height of the list and the height of the cell reach a certain (unknown) ratio
This is in the logs right before the crash :
Native Crash Reporting
TelerikListViewCrash : -[TKListViewLayoutChange applyToAll:] 0x1023126e0 - /Users/nicokuenzler/Library/Developer/CoreSimulator/Devices/47FE3DF0-D39D-427A-9E82-0FCD7B14D208/data/Containers/Bundle/Application/88F8A1C5-46EB-4C80-A80D-A2699030842A/TelerikListViewCrash.app/TelerikListViewCrash : -[TKListViewLayoutChangeManager optimize] 0x10237e174 - /Users/nicokuenzler/Library/Developer/CoreSimulator/Devices/47FE3DF0-D39D-427A-9E82-0FCD7B14D208/data/Containers/Bundle/Application/88F8A1C5-46EB-4C80-A80D-A2699030842A/TelerikListViewCrash.app/TelerikListViewCrash : -[TKListViewLinearLayout layoutAttributesForElementsInRect:] 0x184a7f6c4 - /Library/Developer/CoreSimulator/Volumes/iOS_21C62/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : -[UICollectionViewData _layoutAttributesForElementsInRectForMapping:] 0x185347778 - /Library/Developer/CoreSimulator/Volumes/iOS_21C62/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : -[_UICollectionViewDataAttributesMap _validateLayoutInRect:] 0x184a81770 - /Library/Developer/CoreSimulator/Volumes/iOS_21C62/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : -[UICollectionViewData validateLayoutInRect:] 0x184a824d4 - /Library/Developer/CoreSimulator/Volumes/iOS_21C62/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : -[UICollectionViewData layoutAttributesForElementsInRect:] 0x184a444b4 - /Library/Developer/CoreSimulator/Volumes/iOS_21C62/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : -[UICollectionView _updateVisibleCellsNow:] 0x184a451c8 - /Library/Developer/CoreSimulator/Volumes/iOS_21C62/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : -[UICollectionView _updateVisibleCellsNow:] 0x184a49ec4 - /Library/Developer/CoreSimulator/Volumes/iOS_21C62/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : -[UICollectionView layoutSubviews] 0x10240bce4 - /Users/nicokuenzler/Library/Developer/CoreSimulator/Devices/47FE3DF0-D39D-427A-9E82-0FCD7B14D208/data/Containers/Bundle/Application/88F8A1C5-46EB-4C80-A80D-A2699030842A/TelerikListViewCrash.app/TelerikListViewCrash : -[TKCollectionView layoutSubviews]
Android: when tapping on load on demand template the data is not loaded.
If you use the LoadOnDemandCommand you can bind the command to the button inside the template.
On WinUI there is an exception runtime
Workaround:
Use automatic load on demand mode or bind the command to the template
An example with CollectionView:
<CollectionView ItemsSource="{Binding EmptyMonkeys}"
EmptyView="No items to display" />
When updating to .net8 the following snippet doesn't work with target net8 (maui 8.0.3). Same works with net7 (up to 7.101).
Stops me from targeting net8.
<telerik:RadListView.FooterTemplate>
<DataTemplate>
<Grid
BackgroundColor="{AppThemeBinding Dark={StaticResource ListElementColorDark},
Light={StaticResource ListElementColorLight}}"
IsVisible="{Binding CanSearchMore}">
<telerik:RadBorder Padding="8,10" Style="{StaticResource ListItemContainer}">
<Label HorizontalOptions="Start" Text="{Binding SearchMoreText}" />
</telerik:RadBorder>
<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding SearchMoreCommand}" />
</Grid.GestureRecognizers>
</Grid>
</DataTemplate>
</telerik:RadListView.FooterTemplate>
1. TapGestureRecognizer: Command is not executed / Click not detected
2. Style: Having a PointerOver in "ListItemContainer" works with net7. Doesn't work with net8
Since migrating to MAUI .NET8 GA 8.0.3 (and Telerik 6.5) - on iOS the RadListView keeps repeatedly triggering the defined LoadOnDemand command to get more items even though list has not been scrolled by user.
the behavior is valid for the command, event and collection and when automatic load on demand mode is used.
When using manual mode, it works as expected.