If you are creating a project with MAUI and try your application on different platforms, you will soon discover this issue. The Picker doesn’t work for MacCatalyst. And this is quite annoying.
Scenario
So, on your page you added a Picker like the following
<Picker
ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding ServiceConnections}"
SelectedItem="{Binding SelectedConnection}"
TextColor="{StaticResource White}"
TitleColor="LightGray"
Title="Select an environment..." />
After searching on the internet, I found that a few developers are complaining about this issue. For example, on GitHub. or Stackoverflow. The Maui Picker is a wrapper around a UITextField that fires a UIAlert to show a picker. So, from what I read, I believe the way this worked was by using UITextView. When you tapped it, it will fire an event on edit. This event creates a UIAlertController with an ActionSheet style. It then hijacks the alert by replacing its underlying view with a UIPickerView.
Then, a possible solution is to remove the Title from the Picker if you added one for the Picker. A few people said that the Title caused this problem during the render. So, you can add some conditional around the title like that
<Picker
ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding ServiceConnections}"
SelectedItem="{Binding SelectedConnection}"
TextColor="{StaticResource White}"
TitleColor="LightGray"
Title="{OnPlatform iOS='Select an environment...',
Android='Select an environment...',
WinUI='Select an environment...'}" />
In my case, this wasn’t the case and so I still have the issue.
My workaround
This is not very elegant. It allows me to avoid rethinking the UI for my apps. I use the Picker for all platforms apart from MacCatalyst. So, this is my original code to display a SearchBar and a Picker to filter a ListView.
<Grid
Margin="10,0,10,0"
ColumnDefinitions="*,Auto"
RowDefinitions="Auto,Auto"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand">
<SearchBar
x:Name="searchBar"
Margin="0,0,5,5"
BackgroundColor="White"
Placeholder="Search"
TextChanged="searchBar_TextChanged"
VerticalOptions="FillAndExpand" />
<Picker
x:Name="pickerFilter"
Grid.Column="1"
ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding Filters}"
SelectedIndexChanged="pickerFilter_SelectedIndexChanged" />
</Grid>

This is not working for MacCatalyst. So, I hide the Picker when the application runs on it. In one of my previous post, I implemented a tabpage with RadioButton and I’m going to use part of it. The XAML is now like that
<Grid
Margin="10,0,10,0"
ColumnDefinitions="*,Auto"
RowDefinitions="Auto,Auto"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand">
<SearchBar
x:Name="searchBar"
Margin="0,0,5,5"
BackgroundColor="White"
Placeholder="Search"
TextChanged="searchBar_TextChanged"
VerticalOptions="FillAndExpand" />
<Picker
x:Name="pickerFilter"
Grid.Column="1"
IsVisible="{OnPlatform MacCatalyst='False', Default='True'}"
ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding Filters}"
SelectedIndexChanged="pickerFilter_SelectedIndexChanged" />
<HorizontalStackLayout
BindableLayout.ItemsSource="{Binding Filters}"
HorizontalOptions="EndAndExpand"
RadioButtonGroup.GroupName="gpFilter"
RadioButtonGroup.SelectedValue="{Binding RadioFilter}"
IsVisible="{OnPlatform MacCatalyst='True', Default='False'}" Grid.Row="1" Grid.ColumnSpan="2">
<BindableLayout.ItemTemplate>
<DataTemplate x:DataType="md:FilterModel">
<RadioButton
x:Name="radio"
Margin="0,0,15,0"
Content="{Binding Name}"
GroupName="gpFilter"
HorizontalOptions="FillAndExpand"
MinimumWidthRequest="60"
Value="{Binding Value}"
CheckedChanged="RadioButton_CheckedChanged" />
</DataTemplate>
</BindableLayout.ItemTemplate>
</HorizontalStackLayout>
</Grid>
Now, the magic happens in the IsVisible condition. Using OnPlatform, I show another component for MacCatalyst.
Implementation explains
Now, I use the same source called Filters that is an ObservableCollection of FilterModel that is my model that has Name and Value. With the HorizontalStackLayout, I use the BindableLayout to display the RadioButton.
What you see when the application runs in MacCatalyst is in the following screenshot

So, the user can see this implementation based on the platform.
