Visual StudioでXamarin.Formsを使用してiOSとAndroidの両方で使用するためにXamarin.Forms.CarouselViewを実装しようとしました。 Androidでは完全に動作しますが、iOSでは動作しません。 iOSでは最初のスライドが表示されますが、現在のスライドを変更するために左右にスワイプすることはできません。私は、iOSとAndroidプロジェクトの両方にNuGetパッケージをインストールしました。 XAMLは次のようになります。Xamarin.Forms.CarouselViewがiOSで動作しない
<cv:CarouselView ItemsSource="{Binding Slider}" x:Name="CarouselSlider">
<cv:CarouselView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<!--<RowDefinition Height="Auto"/>-->
</Grid.RowDefinitions>
<Image Grid.RowSpan="1" Aspect="AspectFill" Source="{Binding ImageUrl}" />
<StackLayout BackgroundColor="#7F000000" Padding="12" VerticalOptions="Center" TranslationY="100">
<Label TextColor="White" Text="{Binding Title}" FontSize="26" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"/>
<Label TextColor="White" Text="{Binding TextBody}" FontSize="16" HorizontalOptions="Center" HorizontalTextAlignment="Center" VerticalOptions="CenterAndExpand"/>
</StackLayout>
</Grid>
</DataTemplate>
</cv:CarouselView.ItemTemplate>
</cv:CarouselView>
そして、バックエンドは、次のようになります。
public partial class MainPage : ContentPage
{
public System.Collections.ObjectModel.ObservableCollection<SliderContent> Slider { get; set; }
public MainPage()
{
InitializeComponent();
NavigationPage.SetHasNavigationBar(this, false);
Slider = new System.Collections.ObjectModel.ObservableCollection<SliderContent>
{
new SliderContent
{
Id = 1,
ImageUrl = "https://thumb9.shutterstock.com/display_pic_with_logo/1975943/561919966/stock-photo-brutal-strong-athletic-men-pumping-up-muscles-workout-bodybuilding-concept-background-muscular-561919966.jpg",
Title = "Aliquam et neque arcu",
TextBody = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porttitor erat arcu, vitae accumsan odio iaculis et."
},
new SliderContent
{
Id = 2,
ImageUrl = "https://ifitlife.files.wordpress.com/2014/06/20140604-155437-57277345.jpg",
Title = "Donec lobortis sodales dui",
TextBody = "Morbi congue scelerisque vulputate. Vestibulum sit amet hendrerit justo. Nulla facilisi."
},
new SliderContent
{
Id = 3,
ImageUrl = "https://uproxx.files.wordpress.com/2013/05/dmx-black.jpg?quality=100&w=650",
Title = "Vestibulum arcu elit",
TextBody = "Aliquam in maximus ante. Suspendisse facilisis posuere nulla quis hendrerit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas."
}
};
Grid dotsGrid = DotsIndicator;
dotsGrid.HorizontalOptions = LayoutOptions.CenterAndExpand;
dotsGrid.ColumnDefinitions = new ColumnDefinitionCollection
{
new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) },
new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) },
new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }
};
dotsGrid.RowDefinitions = new RowDefinitionCollection
{
new RowDefinition { Height = new GridLength(6, GridUnitType.Star) },
new RowDefinition { Height = new GridLength(2, GridUnitType.Star) },
new RowDefinition { Height = new GridLength(6, GridUnitType.Star) }
};
int counter = 0;
foreach (var i in Slider)
{
Button label = new Button();
if (Slider.First() == i)
{
label = new Button
{
BackgroundColor = Color.White,
BindingContext = i,
VerticalOptions = LayoutOptions.Fill,
WidthRequest = 20,
HeightRequest = 20,
BorderRadius = 30
};
}
else
{
label = new Button
{
BackgroundColor = Color.Gray,
BindingContext = i,
VerticalOptions = LayoutOptions.Fill,
WidthRequest = 20,
HeightRequest = 20,
BorderRadius = 30
};
}
dotsGrid.Children.Add(label, counter, 1);
counter++;
}
DotsIndicator = dotsGrid;
this.BindingContext = this;
CarouselSlider.ItemSelected += CarouselSlider_ItemSelected;
}
private void CarouselSlider_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var item = e.SelectedItem as SliderContent;
foreach (var i in DotsIndicator.Children)
{
i.BackgroundColor = Color.Gray;
if (i.BindingContext == item)
{
i.BackgroundColor = Color.White;
}
}
return;
}
}
は、iOS上でXamarin.Forms.CarouselViewを使用して既知の問題はありますか私は何かが足りないのですか?
私も同じ問題に直面しています。 –