UIKit.UIImage initWithContentsOfFile Xamarin.iOS - Unreliably throwing exception - ios
Please consider the following error message:
Could not initialize an instance of the type 'UIKit.UIImage": the native 'initWithContentsOfFile:' method returned nil.
I am attempting to load a page on a Xamarin PCL project, and every once in a while, this exception is thrown on iOS. All Android tests seem absolutely fine.
Now when I say "every once in a while" I mean, perhaps once in every 20. I can see no pattern to it whatsoever. It only appears to be happening on an iPhone 5S, however due to the unrepeatable nature of the bug and with limited physical devices to test with I can't guarantee that this is the case.
I can confirm that this is not a case of me setting an icon on a tabbed page as per this SO post, so please don't mark this as a duplicate (unless of course you find another question)
All suggestions welcome
Edit - XAML of the page that on load causes the issue
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:Trak="clr-namespace:Trak"
x:Class="Trak.FinishTrak">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness">
<OnPlatform.iOS>0,20,0,0</OnPlatform.iOS>
<OnPlatform.Android>0,0,0,0</OnPlatform.Android>
</OnPlatform>
</ContentPage.Padding>
<ContentPage.BindingContext>
<Trak:TrackingPageScaling />
</ContentPage.BindingContext>
<ContentPage.Content>
<RelativeLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<ScrollView Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=1}"
RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=1}"
RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0}"
RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=0}">
<StackLayout Padding="0" Orientation="Vertical" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<!-- EVENT/TRAK CONTROL BAR -->
<StackLayout Orientation="Horizontal">
<Label x:Name ="titleLabel" Text="Untitled trak"
FontSize="{Binding FontSmall}"
TextColor="#333333"
HorizontalOptions="StartAndExpand"
VerticalOptions="Center">
<Label.Margin>
<OnPlatform x:TypeArguments="Thickness"
iOS ="10,10,5,0"
Android ="10,15,5,10" />
</Label.Margin>
</Label>
<Image Source="{Trak:ImageResource Trak.Images.edit.png}"
x:Name="editTrakDetails"
HorizontalOptions="End"
VerticalOptions="Center"
HeightRequest="20">
<Image.Margin>
<OnPlatform x:TypeArguments="Thickness"
iOS ="10,5,5,0"
Android ="10,15,15,10" />
</Image.Margin>
</Image>
</StackLayout>
<!-- MAP IMAGE -->
<StackLayout x:Name="imageLayout" Orientation="Horizontal" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Margin="0,0,0,0">
<Image Source="{Trak:ImageResource Trak.Images.map.png}" VerticalOptions="Center" HorizontalOptions="FillAndExpand" HeightRequest="180" Margin="0,0,0,0"/>
</StackLayout>
<!-- TOP STATS-->
<StackLayout Orientation="Horizontal" VerticalOptions="Center" HorizontalOptions="FillAndExpand" Margin="10,10,10,10">
<StackLayout Orientation="Vertical" VerticalOptions="Center" HorizontalOptions="FillAndExpand">
<Label x:Name="milesLabel" FontSize="{Binding FontMed}" TextColor="#333333" FontAttributes="Bold" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,0,0,0"/>
<Label Text="MILES" FontSize="{Binding FontXXSmall}" TextColor="#999999" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,-10,0,0" />
</StackLayout>
<StackLayout Orientation="Vertical" VerticalOptions="Center" HorizontalOptions="FillAndExpand">
<Label x:Name="avrgMPHLabel" FontSize="{Binding FontMed}" TextColor="#333333" FontAttributes="Bold" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,0,0,0"/>
<Label Text="AVG MPH" FontSize="{Binding FontXXSmall}" TextColor="#999999" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,-10,0,0"/>
</StackLayout>
<StackLayout Orientation="Vertical" VerticalOptions="Center" HorizontalOptions="FillAndExpand">
<Label x:Name="minutesLabel" FontSize="{Binding FontMed}" TextColor="#333333" FontAttributes="Bold" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,0,0,0"/>
<Label Text="MINUTES" FontSize="{Binding FontXXSmall}" TextColor="#999999" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,-10,0,0"/>
</StackLayout>
</StackLayout>
<!-- DIVIDER -->
<BoxView Color="#DCDCDC" HeightRequest="1" Margin="0"
VerticalOptions="Center" HorizontalOptions="FillAndExpand"></BoxView>
<!-- BOTTOM STATS -->
<StackLayout Orientation="Horizontal" VerticalOptions="Center" HorizontalOptions="FillAndExpand" Margin="10,10,10,10">
<StackLayout Orientation="Vertical" VerticalOptions="Center" HorizontalOptions="FillAndExpand">
<Label x:Name="caloriesLabel" FontSize="{Binding FontMed}" TextColor="#333333" FontAttributes="Bold" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,0,0,0"/>
<Label Text="CALORIES" FontSize="{Binding FontXXSmall}" TextColor="#999999" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,-10,0,0" />
</StackLayout>
<StackLayout Orientation="Vertical" VerticalOptions="Center" HorizontalOptions="FillAndExpand">
<Label x:Name ="elevationLabel" FontSize="{Binding FontMed}" TextColor="#333333" FontAttributes="Bold" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,0,0,0"/>
<Label Text="ELEVATION" FontSize="{Binding FontXXSmall}" TextColor="#999999" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,-10,0,0"/>
</StackLayout>
<StackLayout Orientation="Vertical" VerticalOptions="Center" HorizontalOptions="FillAndExpand">
<Label x:Name ="HRLabel" FontSize="{Binding FontMed}" TextColor="#333333" FontAttributes="Bold" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,0,0,0"/>
<Label Text="AVERAGE HR" FontSize="{Binding FontXXSmall}" TextColor="#999999" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,-10,0,0"/>
</StackLayout>
</StackLayout>
<!-- DIVIDER -->
<BoxView Color="#DCDCDC" HeightRequest="1" Margin="0"
VerticalOptions="Center" HorizontalOptions="FillAndExpand"></BoxView>
<StackLayout Orientation="Vertical" VerticalOptions="Center" HorizontalOptions="FillAndExpand" Margin="10,10,10,10">
<Label Text="NOTES:" FontSize="{Binding FontSmall}" TextColor="#333333" />
<Label x:Name="trakNOTES" TextColor="#333333" FontSize="{Binding FontXSmall}">
Use this space to add any notes about your Trak. It mabe used to add weather condidtions, nutrition, road surface etc. You can also use the icons below to quickly add weather conditions or road surfaces. More icons will be added in time.
</Label>
</StackLayout>
<!-- WEATHER AND TERRAIN TOGGLE ICONS -->
<StackLayout Orientation="Horizontal" VerticalOptions="Center" HorizontalOptions="FillAndExpand" Margin="10,10,10,20">
<Image Source="{Trak:ImageResource Trak.Images.MeIcons.sun-grey.png}" x:Name="sunButton" WidthRequest="50" HeightRequest="50" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" />
<Image Source="{Trak:ImageResource Trak.Images.MeIcons.rain-grey.png}" x:Name="rainButton" WidthRequest="50" HeightRequest="50" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" />
<Image Source="{Trak:ImageResource Trak.Images.MeIcons.cloudy-grey.png}" x:Name="cloudButton" WidthRequest="50" HeightRequest="50" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" />
<Image Source="{Trak:ImageResource Trak.Images.MeIcons.road-grey.png}" x:Name="roadButton" WidthRequest="50" HeightRequest="50" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" />
<Image Source="{Trak:ImageResource Trak.Images.MeIcons.trail-grey.png}" x:Name="trailButton" WidthRequest="50" HeightRequest="50" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" />
</StackLayout>
<!-- SAVE TRAK BUTTON-->
<Button Text="Save" x:Name="saveButton"
Clicked="OnSaveButtonClick"
BackgroundColor="#ffffff"
FontSize="14" TextColor="#037ade"
BorderWidth="2" BorderColor="#037ade"
Grid.Row="11" Grid.Column="1"
VerticalOptions="Center" HorizontalOptions="Center"
WidthRequest="200" HeightRequest="50"
Margin="0,5,0,25"/>
</StackLayout>
</ScrollView>
<StackLayout x:Name="editTrakModalShadow" BackgroundColor="#000000" Opacity="0" IsVisible="false" Padding="5"
HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=1}"
RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=1}"
RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0}"
RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=0}" />
<!-- MODEL TO SAVE TRAK INFO -->
<StackLayout x:Name="saveTrakModal" BackgroundColor="#FFFFFF" Opacity="0" IsVisible="false"
RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=0.8}"
RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0.1}"
RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=0.1}">
<!-- TITLE INPUT -->
<Label Text="TITLE:" TextColor="#333333" HorizontalTextAlignment="Start" HeightRequest="20" Margin="20,40,20,5"/>
<Entry x:Name="trakTitle" Placeholder="Enter file name" HorizontalOptions="FillAndExpand" HeightRequest="50" Margin="20,5,20,5"/>
<!-- DETAILS INPUT -->
<Label Text="NOTES:" TextColor="#333333" HorizontalTextAlignment="Start" HeightRequest="20" Margin="20,40,20,5"/>
<Editor x:Name="trakNotes" HorizontalOptions="FillAndExpand" HeightRequest="100" Margin="20,5,20,5"/>
<!-- SAVE TRAK -->
<Button x:Name="saveTrakButton" Text="UPDATE" Clicked="saveTrakModelButton" BackgroundColor="#ffffff"
FontSize="14" TextColor="#037ade"
BorderWidth="2" BorderColor="#037ade" Margin="20,5,20,5"/>
<!-- CANCEL -->
<Button Text="CANCEL" Clicked="closeTrakModel" BackgroundColor="#ffffff"
FontSize="14" TextColor="#ff6961"
BorderWidth="2" BorderColor="#ff6961"
Margin="20,5,20,30"/>
</StackLayout>
</RelativeLayout>
</ContentPage.Content>
</ContentPage>
Related
toolbar items appear twice in a page in some ios devices xamarin.forms
i have created a cross platform app using xamarin.forms. i added some toolbar items to some pages but the problem is that they appear twice as in the following picture. this is the code of ny page: <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="ALNahrainAlphaApp.Accounting" xmlns:images="clr-namespace:ALNahrainAlphaApp;assembly=ALNahrainAlphaApp" xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core" ios:Page.UseSafeArea="true"> <ContentPage.ToolbarItems > <ToolbarItem Order="Secondary" Text="logout" Priority="2" Clicked="ToolbarItem_Clicked" /> <ToolbarItem Order="Secondary" Text="View Total Income" Priority="2" Clicked="ToolbarItem_Clicked_1" /> </ContentPage.ToolbarItems> <ContentPage.Resources> <Style TargetType="Grid"> <Setter Property="VisualStateManager.VisualStateGroups"> <VisualStateGroupList> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal" /> <VisualState x:Name="Selected"> <VisualState.Setters> <Setter Property="BackgroundColor" Value="#f4f0ec" /> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateGroupList> </Setter> </Style> </ContentPage.Resources> <ContentPage.Content> <AbsoluteLayout Padding="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> <StackLayout BackgroundColor="White" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All"> <StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" > <SearchBar HorizontalOptions="FillAndExpand" x:Name="search" TextChanged="search_TextChanged"/> <RefreshView x:Name="refresh" > <CollectionView x:Name="registeredstdslist" SelectionChanged="registeredstdslist_SelectionChanged" SelectionMode="Single" > <CollectionView.Header> <Grid Padding="2" ColumnSpacing="1" RowSpacing="1"> <Grid.RowDefinitions> <RowDefinition Height="35"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="0.4*"/> <ColumnDefinition Width="0.5*"/> <ColumnDefinition Width="0.5*"/> <ColumnDefinition Width="0.3*"/> <ColumnDefinition Width="0.2*"/> <ColumnDefinition Width="0.3*"/> </Grid.ColumnDefinitions> <Label Grid.Column="0" Text="StdID" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> <Label Grid.Column="1" Text="Name" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> <Label Grid.Column="2" Text="Expected Date" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> <Label Grid.Column="3" Text="Edlevel" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> <Label Grid.Column="4" Text="Grade" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> <Label Grid.Column="5" Text="Status" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> </Grid> </CollectionView.Header> <CollectionView.ItemTemplate> <DataTemplate > <Grid ColumnSpacing="1" RowSpacing="0" Padding="9,0,0,0" > <Grid.RowDefinitions> <RowDefinition Height="40"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="0.4*"/> <ColumnDefinition Width="0.5*"/> <ColumnDefinition Width="0.5*"/> <ColumnDefinition Width="0.3*"/> <ColumnDefinition Width="0.2*"/> <ColumnDefinition Width="0.3*"/> </Grid.ColumnDefinitions> <Label Grid.Column="0" Text="{Binding stdid}" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" FontSize="13" /> <Label Grid.Column="1" Text="{Binding name}" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" FontSize="13" /> <Label Grid.Column="2" Text="{Binding ExpectedDateofPayment}" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" FontSize="13" /> <Label Grid.Column="3" Text="{Binding edlevel}" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" FontSize="13" /> <Label Grid.Column="4" Text="{Binding grade}" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" Padding="10" FontSize="13" /> <Image Grid.Column="5" VerticalOptions="Center" HorizontalOptions="Center" HeightRequest="20" WidthRequest="20" > <Image.Triggers> <DataTrigger TargetType="Image" Binding="{Binding status}" Value="false" > <Setter Property="Source" Value="{OnPlatform Android=redtik.png,iOS=redtik.png}"/> </DataTrigger> <DataTrigger TargetType="Image" Binding="{Binding status}" Value="true" > <Setter Property="Source" Value="{OnPlatform Android=greentik.png, iOS=greentik.png}"/> </DataTrigger> </Image.Triggers> </Image> </Grid> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </RefreshView> <StackLayout VerticalOptions="EndAndExpand" HorizontalOptions="FillAndExpand" Orientation="Horizontal" BackgroundColor="#0d98ba"> <StackLayout Style="{StaticResource ButtonNavigationBarStackLayoutStyle}" x:Name="stckAddStd"> <Image Margin="0,10,0,5" x:Name="imgAdd" Style="{StaticResource ButtonNavigationBarImageStyle}" /> </StackLayout> <StackLayout Style="{StaticResource ButtonNavigationBarStackLayoutStyle}" x:Name="stckfilter"> <Image Margin="0,10,0,10" x:Name="imgfilter" Style="{StaticResource ButtonNavigationBarImageStyle}" /> </StackLayout> <StackLayout Style="{StaticResource ButtonNavigationBarStackLayoutStyle}" x:Name="stckshare"> <Image Margin="0,10,0,10" x:Name="imgshare" Style="{StaticResource ButtonNavigationBarImageStyle}" /> </StackLayout> </StackLayout> </StackLayout> </StackLayout> <ContentView x:Name="popupLoadingView" BackgroundColor="Transparent" Padding="10, 0" IsVisible="false" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All"> <StackLayout VerticalOptions="Center" HorizontalOptions="Center"> <StackLayout Orientation="Vertical" HeightRequest="150" WidthRequest="200" BackgroundColor="Transparent"> <ActivityIndicator x:Name="activityIndicator" Margin="0,50,0,0" VerticalOptions="Center" HorizontalOptions="Center" Color="Black" WidthRequest="40" HeightRequest="40" ></ActivityIndicator> </StackLayout> </StackLayout> </ContentView> </AbsoluteLayout> </ContentPage.Content> </ContentPage> in android nothing is wrong. but for some reason, in ios, the toolbar items are repeated. any suggestions. thanks in advance.
search is not working in ios xamarin.forms
i have a searchbar in my app. the code for searching is as follows: private void search_TextChanged(object sender, TextChangedEventArgs e) { if (list_total_reg_std.Count != 0) { if (string.IsNullOrEmpty(e.NewTextValue)) { if (filtered == false) registeredstdslist.ItemsSource = list_total_reg_std; else registeredstdslist.ItemsSource = list_filtered_reg_std; } else { if (filtered == false) registeredstdslist.ItemsSource = list_total_reg_std.Where(x => x.name.ToLower().Contains(e.NewTextValue) || x.stdid.ToLower().Contains(e.NewTextValue) || x.edlevel.ToString().ToLower().Contains(e.NewTextValue)); else registeredstdslist.ItemsSource = list_filtered_reg_std.Where(x => x.name.ToLower().Contains(e.NewTextValue) || x.stdid.ToLower().Contains(e.NewTextValue) || x.edlevel.ToString().ToLower().Contains(e.NewTextValue)); } } } this is my xaml: <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="ALNahrainAlphaApp.Accounting" xmlns:images="clr-namespace:ALNahrainAlphaApp;assembly=ALNahrainAlphaApp"> <ContentPage.ToolbarItems > <ToolbarItem Order="Secondary" Text="logout" Priority="2" Clicked="ToolbarItem_Clicked" /> </ContentPage.ToolbarItems> <ContentPage.Resources> <Style TargetType="Grid"> <Setter Property="VisualStateManager.VisualStateGroups"> <VisualStateGroupList> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal" /> <VisualState x:Name="Selected"> <VisualState.Setters> <Setter Property="BackgroundColor" Value="#f4f0ec" /> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateGroupList> </Setter> </Style> </ContentPage.Resources> <ContentPage.Content> <AbsoluteLayout Padding="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> <StackLayout BackgroundColor="White" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All"> <StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" > <SearchBar HorizontalOptions="FillAndExpand" x:Name="search" TextChanged="search_TextChanged"/> <RefreshView x:Name="refresh" > <CollectionView x:Name="registeredstdslist" SelectionChanged="registeredstdslist_SelectionChanged" SelectionMode="Single" > <CollectionView.Header> <Grid Padding="2" ColumnSpacing="1" RowSpacing="1"> <Grid.RowDefinitions> <RowDefinition Height="35"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="0.4*"/> <ColumnDefinition Width="0.5*"/> <ColumnDefinition Width="0.5*"/> <ColumnDefinition Width="0.3*"/> <ColumnDefinition Width="0.2*"/> <ColumnDefinition Width="0.3*"/> </Grid.ColumnDefinitions> <Label Grid.Column="0" Text="StdID" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> <Label Grid.Column="1" Text="Name" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> <Label Grid.Column="2" Text="Reg Date" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> <Label Grid.Column="3" Text="Edlevel" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> <Label Grid.Column="4" Text="Grade" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> <Label Grid.Column="5" Text="Status" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" /> </Grid> </CollectionView.Header> <CollectionView.ItemTemplate> <DataTemplate > <Grid ColumnSpacing="1" RowSpacing="0" Padding="9,0,0,0" > <Grid.RowDefinitions> <RowDefinition Height="40"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="0.4*"/> <ColumnDefinition Width="0.5*"/> <ColumnDefinition Width="0.5*"/> <ColumnDefinition Width="0.3*"/> <ColumnDefinition Width="0.2*"/> <ColumnDefinition Width="0.3*"/> </Grid.ColumnDefinitions> <Label Grid.Column="0" Text="{Binding stdid}" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" FontSize="13" /> <Label Grid.Column="1" Text="{Binding name}" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" FontSize="13" /> <Label Grid.Column="2" Text="{Binding DateofReg}" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" FontSize="13" /> <Label Grid.Column="3" Text="{Binding edlevel}" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" FontSize="13" /> <Label Grid.Column="4" Text="{Binding grade}" TextColor="Black" VerticalOptions="Center" HorizontalOptions="Center" LineBreakMode="TailTruncation" Padding="10" FontSize="13" /> <Image Grid.Column="5" VerticalOptions="Center" HorizontalOptions="Center" HeightRequest="20" WidthRequest="20" > <Image.Triggers> <DataTrigger TargetType="Image" Binding="{Binding status}" Value="false" > <Setter Property="Source" Value="{OnPlatform Android=redtik.png,iOS=redtik.png}"/> </DataTrigger> <DataTrigger TargetType="Image" Binding="{Binding status}" Value="true" > <Setter Property="Source" Value="{OnPlatform Android=greentik.png, iOS=greentik.png}"/> </DataTrigger> </Image.Triggers> </Image> </Grid> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </RefreshView> <StackLayout VerticalOptions="EndAndExpand" HorizontalOptions="FillAndExpand" Orientation="Horizontal" BackgroundColor="#0d98ba"> <StackLayout Style="{StaticResource ButtonNavigationBarStackLayoutStyle}" x:Name="stckAddStd"> <Image Margin="0,10,0,5" x:Name="imgAdd" Style="{StaticResource ButtonNavigationBarImageStyle}" /> </StackLayout> <StackLayout Style="{StaticResource ButtonNavigationBarStackLayoutStyle}" x:Name="stckfilter"> <Image Margin="0,10,0,10" x:Name="imgfilter" Style="{StaticResource ButtonNavigationBarImageStyle}" /> </StackLayout> <StackLayout Style="{StaticResource ButtonNavigationBarStackLayoutStyle}" x:Name="stckshare"> <Image Margin="0,10,0,10" x:Name="imgshare" Style="{StaticResource ButtonNavigationBarImageStyle}" /> </StackLayout> </StackLayout> </StackLayout> </StackLayout> <ContentView x:Name="popupLoadingView" BackgroundColor="Transparent" Padding="10, 0" IsVisible="false" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All"> <StackLayout VerticalOptions="Center" HorizontalOptions="Center"> <StackLayout Orientation="Vertical" HeightRequest="150" WidthRequest="200" BackgroundColor="Transparent"> <ActivityIndicator x:Name="activityIndicator" Margin="0,50,0,0" VerticalOptions="Center" HorizontalOptions="Center" Color="Black" WidthRequest="40" HeightRequest="40" ></ActivityIndicator> </StackLayout> </StackLayout> </ContentView> </AbsoluteLayout> </ContentPage.Content> </ContentPage> the registeredstdslist is a collection view that has data about students that i get from a database. the code works well on android but on my ios simulator, it doesn't work. the collectionview shows no data when i write something in the searchbar though what i write has letters like some data in my list. and when i erase what i wrote, all data are displayed again. why is that? what am i doing wrong? Update: i added this: private void search_TextChanged(object sender, TextChangedEventArgs e) { if (list_total_reg_std.Count != 0) { if (string.IsNullOrEmpty(e.NewTextValue)) { if (filtered == false) registeredstdslist.ItemsSource = list_total_reg_std; else registeredstdslist.ItemsSource = list_filtered_reg_std; } else { if (filtered == false) if(list_total_reg_std.FindAll(x => x.name.ToLower().Contains(e.NewTextValue)).Count==0) DisplayAlert("Operation Failed", "No matchiing data!", "Cancel"); // registeredstdslist.ItemsSource = list_total_reg_std.Where(x => x.name.ToLower().Contains(e.NewTextValue) || x.stdid.ToLower().Contains(e.NewTextValue) || x.edlevel.ToString().ToLower().Contains(e.NewTextValue)); else registeredstdslist.ItemsSource = list_filtered_reg_std.Where(x => x.name.ToLower().Contains(e.NewTextValue) || x.stdid.ToLower().Contains(e.NewTextValue) || x.edlevel.ToString().ToLower().Contains(e.NewTextValue)); } } it actually gave No matching data but why? and why does it work on android with no problems and on ios it doesn't?
One problem I see is that if you type any upper case, it will not match. x.name.ToLower().Contains(e.NewTextValue) should be x.name.ToLower().Contains(e.NewTextValue.ToLower()).
Xamarin.Forms CollectionView GridItemsLayout same height elements
How do I make the CollectionView render all items with the same height while using a GridItemsLayout on iOS? It already works on Android that all elements in a row gets the same height but on iOS they are squished vertically in the center of the row. This is how it currently looks on iOS (how it not should be..): And this is how it currently looks on Android (how it also should be on iOS - all elements are scaled to the same height in the same row): As of now, this is how my XAML looks like: <CollectionView Grid.Row="1" x:Name="DataListView" ItemSizingStrategy="MeasureAllItems" ItemsSource="{Binding Data}" IsGrouped="False" ItemTemplate="{StaticResource EntryTemplate}" Header="{Binding Header}" Footer="{Binding Footer}" BackgroundColor="{DynamicResource DarkBackgroundColor}"> <CollectionView.ItemsLayout> <!-- Span is set in OnSizeAllocated to make this "dynamic" --> <GridItemsLayout x:Name="GridItemsLayout" Orientation="Vertical" Span="1" /> </CollectionView.ItemsLayout> <CollectionView.HeaderTemplate> <DataTemplate x:DataType="x:String"> <Grid Padding="10,20"> <Label Text="{Binding}" TextColor="{DynamicResource TextColor}" FontAttributes="Bold" HorizontalTextAlignment="Center" LineBreakMode="WordWrap" /> </Grid> </DataTemplate> </CollectionView.HeaderTemplate> <CollectionView.FooterTemplate> <DataTemplate x:DataType="x:String"> <Grid Padding="{OnPlatform iOS=20 30 20 20, Default=20}"> <Label Text="{Binding}" TextColor="{DynamicResource LightTextColor}" FontSize="Micro" HorizontalTextAlignment="Center" LineBreakMode="WordWrap" /> </Grid> </DataTemplate> </CollectionView.FooterTemplate> </CollectionView> This is my entry data template XAML: <DataTemplate x:Key="EntryTemplate" x:DataType="data:Entry"> <Grid BackgroundColor="Red" VerticalOptions="FillAndExpand" Margin="0"> <Frame WidthRequest="{Binding Converter={StaticResource FlowColumnWidthConverter}, ConverterParameter=324}" BackgroundColor="{DynamicResource DarkerBackgroundColor}" BorderColor="{Binding IsActive, Converter={StaticResource ActiveToColorConverter}}" HorizontalOptions="Center" Margin="8" Padding="10" CornerRadius="5"> <Frame.GestureRecognizers> <TapGestureRecognizer Tapped="OnChecklistElementTapped" /> </Frame.GestureRecognizers> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="40" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Image Grid.Row="0" Grid.Column="0" Grid.RowSpan="4" Source="{Binding Type, Converter={StaticResource TypeToEmbeddedImageConverter}}" WidthRequest="32" HeightRequest="32" Margin="4" /> <Label Grid.Row="0" Grid.Column="1" Text="{Binding Name}" FontAttributes="Bold" LineBreakMode="TailTruncation" VerticalOptions="Start" /> <Label Grid.Row="1" Grid.Column="1" Text="{Binding Region}" FontSize="12" LineBreakMode="TailTruncation" VerticalOptions="Start" Margin="0,-6,0,0" /> <Label Grid.Row="2" Grid.Column="1" Text="{Binding AdditionalData}" TextType="Html" FontSize="12" LineBreakMode="WordWrap" Margin="0" IsVisible="{Binding AdditionalData, Converter={StaticResource EmptyToVisibilityConverter}}" InputTransparent="True" /> <Label Grid.Row="3" Grid.Column="1" Text="{Binding Description}" FontSize="12" LineBreakMode="WordWrap" IsVisible="{Binding Description, Converter={StaticResource EmptyToVisibilityConverter}}" /> <Switch Grid.Row="0" Grid.Column="2" Grid.RowSpan="2" IsToggled="{Binding IsDone}" HorizontalOptions="Center" VerticalOptions="Center" /> <StackLayout Grid.Row="2" Grid.Column="2" Grid.RowSpan="2" Orientation="Horizontal" Spacing="12" HorizontalOptions="Center" VerticalOptions="Start" Margin="0,4,0,4"> <controls:TintedImageButton Source="Details.png" Clicked="OnNavigateToDetailsButtonClicked" HeightRequest="32" WidthRequest="32" IsVisible="{Binding Details, Converter={StaticResource EmptyToVisibilityConverter}}" HorizontalOptions="Center" BackgroundColor="Transparent" /> <controls:TintedImageButton Source="Map.png" Clicked="OnNavigateToMapButtonClicked" HeightRequest="32" WidthRequest="32" HorizontalOptions="Center" BackgroundColor="Transparent" IsVisible="{x:Static resources:Metadata.MAP_ENABLED}" /> </StackLayout> </Grid> </Frame> </Grid> </DataTemplate> And this is my code behind (where I set how many columns there should be): protected override void OnSizeAllocated(double width, double height) { base.OnSizeAllocated(width, height); GridItemsLayout.Span = Convert.ToInt32(Math.Floor(width / 340d)); } Anyone has an idea, why this is looks different on iOS in the first place and what I should look up to fix this problem?
BoxView not visible in iOS
I created the following BoxView in my App.xaml (as a separator)... <Style x:Key="BoxViewGray" TargetType="BoxView"> <Setter Property="HeightRequest" Value="0.2"/> <Setter Property="Color" Value="Gray"/> </Style> ...and use it like so in my Page: <BoxView Style="{StaticResource BoxViewGray}" /> Straight forward and it works out quite fine with Android (Release & Debug) though when I debug the iOS Solution, it's not visible. Maybe as an additional info: I don't have a physical Mac for debugging but use Macincloud instead of. Don't have a physical device (iPhone etc) either. Update: The complete XAML code of the page: <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:vm="clr-namespace:ErzengelMichael.ViewModels" x:Class="ErzengelMichael.Views.EinstellungenPage" Title="{Binding Rosenkranz[0].TabBarTitleSettings}" > <ContentPage.BindingContext> <vm:RosenkranzViewModel /> </ContentPage.BindingContext> <ContentPage.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0.1" Color="Purple" /> <GradientStop Offset="0.9" Color="DarkSlateBlue" /> </LinearGradientBrush> </ContentPage.Background> <ScrollView> <StackLayout Padding="10" > <StackLayout Padding="5"> <BoxView Style="{StaticResource BoxViewGray}" /> <Label Text="{Binding Rosenkranz[0].SettingsText}" HorizontalOptions="Center" FontSize="24" TextColor="White" BackgroundColor="Transparent" Margin="0,0,0,5" /> <BoxView Style="{StaticResource BoxViewGray}" /> </StackLayout> <StackLayout Orientation="Vertical" Padding="10" > <StackLayout HorizontalOptions="Center" Orientation="Horizontal" Spacing="20" Padding="10"> <ImageButton CornerRadius="10" HeightRequest="80" BackgroundColor="Transparent" CommandParameter="French" Command="{Binding ChangeLanguageCommand}" Source="france.jpg" VerticalOptions="Center" /> <ImageButton CornerRadius="10" HeightRequest="80" BackgroundColor="Transparent" CommandParameter="German" Command="{Binding ChangeLanguageCommand}" Source="germany.jpg" VerticalOptions="Center" /> </StackLayout> <StackLayout HorizontalOptions="Center" Orientation="Horizontal" Spacing="20" Padding="10" > <ImageButton CornerRadius="10" HeightRequest="80" BackgroundColor="Transparent" CommandParameter="English" Command="{Binding ChangeLanguageCommand}" Source="usa.jpg" VerticalOptions="Center" /> <ImageButton CornerRadius="10" HeightRequest="80" BackgroundColor="Transparent" CommandParameter="Spanish" Command="{Binding ChangeLanguageCommand}" Source="spain.jpg" VerticalOptions="Center" /> </StackLayout> <StackLayout HorizontalOptions="Center" Orientation="Horizontal" Spacing="20" Padding="10" > <ImageButton CornerRadius="10" HeightRequest="80" BackgroundColor="Transparent" CommandParameter="Italian" Command="{Binding ChangeLanguageCommand}" Source="italy.jpg" VerticalOptions="Center" /> <ImageButton CornerRadius="10" HeightRequest="80" BackgroundColor="Transparent" CommandParameter="Portugese" Command="{Binding ChangeLanguageCommand}" Source="portugal.jpg" VerticalOptions="Center" /> </StackLayout> </StackLayout> <!--#region IMPRESSUM --> <StackLayout Spacing="15" Padding="10" HorizontalOptions="Center" VerticalOptions="Center"> <BoxView Style="{StaticResource BoxViewGray}"/> <Label HorizontalOptions="Center" HorizontalTextAlignment="Center" Text="Development and Design by xxx#web.de" TextColor="White" /> <Label HorizontalOptions="Center" Text="Version 1.0" TextColor="White" FontAttributes="Italic"/> <Label HorizontalOptions="Center" TextColor="White" HorizontalTextAlignment="Center" Text="Images used in this App are in the public domain worldwide."/> <StackLayout Orientation="Horizontal" Spacing="0" HorizontalOptions="Center" > <Label HorizontalTextAlignment="Center" > <Label.FormattedText> <FormattedString> <Span Text="" FontFamily="FA-B" TextColor="White" CharacterSpacing="20" FontSize="24" /> <Span Text="" FontFamily="FA-B" TextColor="White" FontSize="24" /> </FormattedString> </Label.FormattedText> </Label> </StackLayout> <BoxView Style="{StaticResource BoxViewGray}" /> </StackLayout> <!--#endregion--> </StackLayout> </ScrollView> </ContentPage>
That because you set the HeightRequest as 0.2(which is less than 0.5) . So in iOS it will been ignored on some device because of screen resolution . So you would better set it as 0.5 or higher on iOS device . <Style x:Key="BoxViewGray" TargetType="BoxView"> <Setter Property="HeightRequest"> <Setter.Value> <OnPlatform iOS="0.5" Android="0.2" /> </Setter.Value> </Setter> <Setter Property="Color" Value="Gray"/> </Style>
Structure of my scrollview xamarin ios
I have the following structure and I want to put a scrollView in my ios application, when I place the Scrowview in this structure my data all disappear. How to make a correct structure where my scrollview works? <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:controls="clr-namespace:g.Portable.Helpers;assembly=g.Portable" x:Class="g.Portable.Views.AboutPage" xmlns:cv="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.CarouselView" Title="titulo"> <AbsoluteLayout VerticalOptions="FillAndExpand"> <ScrollView HeightRequest="1000"> <cv:CarouselView x:Name="MAinCarousel" VerticalOptions="Start" HeightRequest="250"> <cv:CarouselView.ItemTemplate> <DataTemplate> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Image x:Name="Image" Grid.RowSpan="2" Source="{Binding img}" Scale="1.0" Aspect="AspectFill" VerticalOptions="FillAndExpand" HeightRequest="250"/> <StackLayout Grid.Row="1" BackgroundColor="#80000000" Padding="5"> <Label TextColor="White" Text="{Binding category}" BackgroundColor="{Binding category_color}" Font="Bold" FontSize="16" HorizontalOptions="Start" VerticalOptions="CenterAndExpand"/> <Label TextColor="White" Text="{Binding data}" FontSize="16" HorizontalOptions="Start" VerticalOptions="CenterAndExpand"/> <Label TextColor="White" Text="{Binding titulo}" FontSize="18" HorizontalOptions="Start" Font="Bold" VerticalOptions="CenterAndExpand"/> <Button Text="Clique aqui..." IsVisible="true" HeightRequest="16" Clicked="Handle_Clicked" TextColor="White" BackgroundColor="#1C86EE"/> </StackLayout> </Grid> </DataTemplate> </cv:CarouselView.ItemTemplate> </cv:CarouselView> <StackLayout BackgroundColor="#234084"> <Label Text=" Últimas " TextColor="White" Font="Bold" FontSize="16" BackgroundColor="#234084"/> </StackLayout> <ListView x:Name="listView" CachingStrategy="RecycleElement" ItemsSource="{Binding FeedItems}" HasUnevenRows="True" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1" HeightRequest="344" VerticalOptions="Fill"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <Grid Padding="5"> <Grid.ColumnDefinitions> <ColumnDefinition Width="70"/> <ColumnDefinition Width="5"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <StackLayout HeightRequest = "60" WidthRequest="60"> <Image x:Name="Image" Source="{Binding Image}" Scale="1.0" Aspect="AspectFill" VerticalOptions="FillAndExpand"/> </StackLayout> <StackLayout Grid.Column="2" Spacing="4" VerticalOptions="Center"> <Label Text="{Binding Category}" TextColor="White" FontSize="Small" LineBreakMode="NoWrap" BackgroundColor="{Binding Color_category}"/> <Label Text="{Binding PublishDate}" TextColor="#666666" FontSize="Small" LineBreakMode="NoWrap"/> <Label Text="{Binding Title}" TextColor="#234084" Font="Bold" FontSize="Small" LineBreakMode="WordWrap"/> </StackLayout> </Grid> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> </ScrollView> <StackLayout IsVisible="{Binding IsBusy}" BackgroundColor="#80000000" Padding="12" AbsoluteLayout.LayoutFlags="PositionProportional" AbsoluteLayout.LayoutBounds="0.5,0.5,-1,-1"> <ActivityIndicator IsRunning="{Binding IsBusy}" Color ="White"> </ActivityIndicator> <Label Text="Carregando..." HorizontalOptions="Center" TextColor="White"/> </StackLayout> </AbsoluteLayout>
You have multiple children in ScrollView. That is not going to work. ScrollView can have only one direct child