В ListView Xamarin Forms StackLayout помещается в ViewCell. Следующий триггер используется для установки высоты и поля StackLayout равным 0, чтобы в ListView не было пропуска.
<StackLayout.Triggers>
<Trigger TargetType="StackLayout" Property="IsVisible" Value="False">
<Setter Property="HeightRequest" Value="0" />
<Setter Property="Margin" Value="0" />
</Trigger>
</StackLayout.Triggers>
Код отлично работает на Android. Но на iOS все еще есть пробелы.
Обычно вызов ViewCell.ForceUpdateSize для события касания может помочь решить такую проблему. Но нам нужно сделать это грамматически. Поэтому я попытался создать CustomViewCell, но это не помогло.
public class CustomViewCell : ViewCell
{
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
var viewModel = (tecommobile.ViewModels.Input)BindingContext;
viewModel.PropertyChanged += (sender, e) =>
{
if (Device.RuntimePlatform == Device.iOS)
{
if (e.PropertyName == "IsVisible")
{
//ForceUpdateSize(); crashes, the possible cause could be the height of the StackLayout is already set to 0. The test shows that the tapped event doesn't fire if the height is 0.
}
}
};
}
}
Пожалуйста, посоветуйте решение или любой обходной путь. Спасибо.