[net9.0] Fix loop CarouselViewHandler2 (#24230)

* [iOS] Load the correct loop source for carouselview

* [iOS] Add mapper for CarouselViewHandler

* [tests] Enable new handlers

* We need a CarouselViewHandler2 base

* [iOS] Fix no ItemTemplate CollectionView2

* [iOS] When we detach make sure to reset state of InitialPosition

* [iOS] Fix ScrollTo correct item with CarouselView loop

* [iOS] Enable CV2 mappers for Header and Footer and SelectedItems

* Fix public api catalyst

* [iOS] Make sure to arrange and layout header

* [iOS] Handling global Header and Footer with UICollectionViewCompositionalLayout

* [iOS] Disable code to size CollectionView2

* Add UIContainerView2

* Update test image

* Fix test

* [iOS] Make less api changes for now

* Try fix build

* Fix public api

* Try updateintialposition earlier

* Fix tests

* [tests] Dont use new handlers for CollectionView2
This commit is contained in:
Rui Marinho 2024-08-26 18:06:16 +01:00 коммит произвёл GitHub
Родитель 4051892181
Коммит f2f841ba94
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
22 изменённых файлов: 512 добавлений и 465 удалений

Просмотреть файл

@ -1,11 +1,36 @@
#nullable disable
using System;
using Foundation;
using Microsoft.Maui.Controls.Handlers.Items;
using Microsoft.Maui.Graphics;
using UIKit;
namespace Microsoft.Maui.Controls.Handlers.Items2
{
public partial class CarouselViewHandler2
{
public CarouselViewHandler2() : base(Mapper)
{
}
public CarouselViewHandler2(PropertyMapper mapper = null) : base(mapper ?? Mapper)
{
}
public static PropertyMapper<CarouselView, CarouselViewHandler2> Mapper = new(ItemsViewMapper)
{
[Controls.CarouselView.IsSwipeEnabledProperty.PropertyName] = MapIsSwipeEnabled,
[Controls.CarouselView.PeekAreaInsetsProperty.PropertyName] = MapPeekAreaInsets,
[Controls.CarouselView.IsBounceEnabledProperty.PropertyName] = MapIsBounceEnabled,
[Controls.CarouselView.PositionProperty.PropertyName] = MapPosition,
[Controls.CarouselView.CurrentItemProperty.PropertyName] = MapCurrentItem
};
}
public partial class CarouselViewHandler2 : ItemsViewHandler2<CarouselView>
{
protected override CarouselViewController2 CreateController(CarouselView newElement, UICollectionViewLayout layout)
@ -111,23 +136,26 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
protected override void ScrollToRequested(object sender, ScrollToRequestEventArgs args)
{
// if (VirtualView?.Loop == true)
// {
// var goToIndexPath = (Controller as CarouselViewController2).GetScrollToIndexPath(args.Index);
if (VirtualView?.Loop == true)
{
var goToIndexPath = (Controller as CarouselViewController2).GetScrollToIndexPath(args.Index);
// if (!IsIndexPathValid(goToIndexPath))
// {
// return;
// }
if (!IsIndexPathValid(goToIndexPath))
{
return;
}
// Controller.CollectionView.ScrollToItem(goToIndexPath,
// args.ScrollToPosition.ToCollectionViewScrollPosition( UICollectionViewScrollDirection.Vertical), // TODO: Fix _layout.ScrollDirection),
// args.IsAnimated);
// }
// else
// {
base.ScrollToRequested(sender, args);
// }
bool IsHorizontal = VirtualView.ItemsLayout.Orientation == ItemsLayoutOrientation.Horizontal;
UICollectionViewScrollDirection scrollDirection = IsHorizontal ? UICollectionViewScrollDirection.Horizontal : UICollectionViewScrollDirection.Vertical;
Controller.CollectionView.ScrollToItem(goToIndexPath,
args.ScrollToPosition.ToCollectionViewScrollPosition(scrollDirection), // TODO: Fix _layout.ScrollDirection),
args.IsAnimated);
}
else
{
base.ScrollToRequested(sender, args);
}
}
public static void MapIsSwipeEnabled(CarouselViewHandler2 handler, CarouselView carouselView)

Просмотреть файл

@ -1,4 +1,5 @@
using System;
#nullable disable
using System;
using System.Collections.Generic;
using System.Text;
using Foundation;
@ -8,6 +9,16 @@ using UIKit;
namespace Microsoft.Maui.Controls.Handlers.Items2
{
internal class LayoutHeaderFooterInfo
{
public IView FooterView { get; set; }
public IView HeaderView { get; set; }
public DataTemplate FooterTemplate { get; set; }
public DataTemplate HeaderTemplate { get; set; }
public bool HasHeader { get; set; }
public bool HasFooter { get; set; }
}
internal class LayoutGroupingInfo
{
public bool IsGrouped { get; set; }
@ -21,6 +32,33 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
public SnapPointsType SnapType { get; set; }
}
public partial class CollectionViewHandler2
{
public CollectionViewHandler2() : base(Mapper)
{
}
public CollectionViewHandler2(PropertyMapper mapper = null) : base(mapper ?? Mapper)
{
}
public static PropertyMapper<CollectionView, CollectionViewHandler2> Mapper = new(ItemsViewMapper)
{
[ReorderableItemsView.CanReorderItemsProperty.PropertyName] = MapCanReorderItems,
[GroupableItemsView.IsGroupedProperty.PropertyName] = MapIsGrouped,
[SelectableItemsView.SelectedItemProperty.PropertyName] = MapSelectedItem,
[SelectableItemsView.SelectedItemsProperty.PropertyName] = MapSelectedItems,
[SelectableItemsView.SelectionModeProperty.PropertyName] = MapSelectionMode,
[StructuredItemsView.HeaderTemplateProperty.PropertyName] = MapHeaderTemplate,
[StructuredItemsView.FooterTemplateProperty.PropertyName] = MapFooterTemplate,
[StructuredItemsView.HeaderProperty.PropertyName] = MapHeaderTemplate,
[StructuredItemsView.FooterProperty.PropertyName] = MapFooterTemplate,
};
}
public partial class CollectionViewHandler2 : ItemsViewHandler2<ReorderableItemsView>
{
// Reorderable
@ -32,7 +70,6 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
(handler.Controller as ReorderableItemsViewController2<ReorderableItemsView>)?.UpdateCanReorderItems();
}
// Groupable
protected override void ScrollToRequested(object sender, ScrollToRequestEventArgs args)
{
@ -90,6 +127,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
// Structured
protected override UICollectionViewLayout SelectLayout()
{
var headerFooterInfo = new LayoutHeaderFooterInfo();
var groupInfo = new LayoutGroupingInfo();
if (ItemsView is GroupableItemsView groupableItemsView && groupableItemsView.IsGrouped)
@ -99,6 +137,22 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
groupInfo.HasFooter = groupableItemsView.GroupFooterTemplate is not null;
}
if (ItemsView is StructuredItemsView structuredItemsView)
{
headerFooterInfo.HeaderTemplate = structuredItemsView.HeaderTemplate;
headerFooterInfo.FooterTemplate = structuredItemsView.FooterTemplate;
if (structuredItemsView.Header is View headerView)
{
headerFooterInfo.HeaderView = headerView;
}
if (structuredItemsView.Footer is View footerView)
{
headerFooterInfo.FooterView = footerView;
}
headerFooterInfo.HasHeader = structuredItemsView.Header is not null;
headerFooterInfo.HasFooter = structuredItemsView.Footer is not null;
}
var itemSizingStrategy = ItemsView.ItemSizingStrategy;
var itemsLayout = ItemsView.ItemsLayout;
@ -124,21 +178,23 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
if (itemsLayout is LinearItemsLayout listItemsLayout)
{
return LayoutFactory2.CreateList(listItemsLayout, groupInfo);
return LayoutFactory2.CreateList(listItemsLayout, groupInfo, headerFooterInfo);
}
// Fall back to vertical list
return LayoutFactory2.CreateList(new LinearItemsLayout(ItemsLayoutOrientation.Vertical), groupInfo);
return LayoutFactory2.CreateList(new LinearItemsLayout(ItemsLayoutOrientation.Vertical), groupInfo, headerFooterInfo);
}
public static void MapHeaderTemplate(CollectionViewHandler2 handler, StructuredItemsView itemsView)
{
(handler.Controller as StructuredItemsViewController2<ReorderableItemsView>)?.UpdateHeaderView();
handler.UpdateLayout();
// (handler.Controller as StructuredItemsViewController2<ReorderableItemsView>)?.UpdateHeaderView();
}
public static void MapFooterTemplate(CollectionViewHandler2 handler, StructuredItemsView itemsView)
{
(handler.Controller as StructuredItemsViewController2<ReorderableItemsView>)?.UpdateFooterView();
handler.UpdateLayout();
//(handler.Controller as StructuredItemsViewController2<ReorderableItemsView>)?.UpdateFooterView();
}
public static void MapItemsLayout(CollectionViewHandler2 handler, StructuredItemsView itemsView)

Просмотреть файл

@ -64,7 +64,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
protected abstract UICollectionViewLayout SelectLayout();
protected abstract ItemsViewController2<TItemsView> CreateController(TItemsView newElement, UICollectionViewLayout layout);
protected override UIView CreatePlatformView() => Controller?.View;
public static void MapItemsSource(ItemsViewHandler2<TItemsView> handler, ItemsView itemsView)
@ -176,9 +176,11 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
// public override Size GetDesiredSize(double widthConstraint, double heightConstraint)
// {
// var size = base.GetDesiredSize(widthConstraint, heightConstraint);
//
// var potentialContentSize = Controller.GetSize();
//
// System.Diagnostics.Debug.WriteLine($"potentialContentSize: {potentialContentSize}");
// // If contentSize comes back null, it means none of the content has been realized yet;
// // we need to return the expansive size the collection view wants by default to get
// // it to start measuring its content
@ -186,19 +188,19 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
// {
// return size;
// }
//
// var contentSize = potentialContentSize.Value;
//
// // If contentSize does have a value, our target size is the smaller of it and the constraints
//
// size.Width = contentSize.Width <= widthConstraint ? contentSize.Width : widthConstraint;
// size.Height = contentSize.Height <= heightConstraint ? contentSize.Height : heightConstraint;
//
// var virtualView = this.VirtualView as IView;
//
// size.Width = ViewHandlerExtensions.ResolveConstraints(size.Width, virtualView.Width, virtualView.MinimumWidth, virtualView.MaximumWidth);
// size.Height = ViewHandlerExtensions.ResolveConstraints(size.Height, virtualView.Height, virtualView.MinimumHeight, virtualView.MaximumHeight);
//
// return size;
// }
}

Просмотреть файл

@ -1,48 +0,0 @@
#nullable disable
using System;
using CoreGraphics;
using Foundation;
using Microsoft.Maui.Graphics;
using ObjCRuntime;
using UIKit;
namespace Microsoft.Maui.Controls.Handlers.Items2
{
public class CarouselTemplatedCell2 : TemplatedCell2
{
public new static NSString ReuseId = new NSString("Microsoft.Maui.Controls.CarouselTemplatedCell2");
//CGSize _constraint;
[Export("initWithFrame:")]
[Microsoft.Maui.Controls.Internals.Preserve(Conditional = true)]
protected CarouselTemplatedCell2(CGRect frame) : base(frame)
{
}
// public override void ConstrainTo(nfloat constant)
// {
// }
//
// public override void ConstrainTo(CGSize constraint)
// {
// ClearConstraints();
//
// _constraint = constraint;
// }
// public override CGSize Measure()
// {
// return new CGSize(_constraint.Width, _constraint.Height);
// }
//
// protected override (bool, Size) NeedsContentSizeUpdate(Size currentSize)
// {
// return (false, Size.Zero);
// }
//
// protected override bool AttributesConsistentWithConstrainedDimension(UICollectionViewLayoutAttributes attributes)
// {
// return false;
// }
}
}

Просмотреть файл

@ -124,15 +124,9 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
return base.DetermineCellReuseId(itemIndex);
}
protected override void RegisterViewTypes()
{
CollectionView.RegisterClassForCell(typeof(CarouselTemplatedCell2), CarouselTemplatedCell2.ReuseId);
base.RegisterViewTypes();
}
protected override Items.IItemsViewSource CreateItemsViewSource()
{
var itemsSource = Items.ItemsSourceFactory.CreateForCarouselView(ItemsView.ItemsSource, this, ItemsView.Loop);
var itemsSource = Items2.ItemsSourceFactory2.CreateForCarouselView(ItemsView.ItemsSource, this, ItemsView.Loop);
_carouselViewLoopManager?.SetItemsSource(itemsSource);
SubscribeCollectionItemsSourceChanged(itemsSource);
return itemsSource;
@ -142,6 +136,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
{
base.AttachingToWindow();
Setup(ItemsView);
UpdateInitialPosition();
}
private protected override void DetachingFromWindow()
@ -155,6 +150,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
void TearDown(CarouselView carouselView)
{
_oldViews = null;
InitialPositionSet = false;
//carouselView.Scrolled -= CarouselViewScrolled;

Просмотреть файл

@ -58,21 +58,22 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
RegisterSupplementaryViews(UICollectionElementKindSection.Footer);
}
void RegisterSupplementaryViews(UICollectionElementKindSection kind)
string DetermineViewReuseId(NSString elementKind)
{
CollectionView.RegisterClassForSupplementaryView(typeof(HorizontalSupplementaryView2),
kind, HorizontalSupplementaryView2.ReuseId);
CollectionView.RegisterClassForSupplementaryView(typeof(VerticalSupplementaryView2),
kind, VerticalSupplementaryView2.ReuseId);
CollectionView.RegisterClassForSupplementaryView(typeof(HorizontalDefaultSupplementalView2),
kind, HorizontalDefaultSupplementalView2.ReuseId);
CollectionView.RegisterClassForSupplementaryView(typeof(VerticalDefaultSupplementalView2),
kind, VerticalDefaultSupplementalView2.ReuseId);
return DetermineViewReuseId(elementKind == UICollectionElementKindSectionKey.Header
? ItemsView.GroupHeaderTemplate
: ItemsView.GroupFooterTemplate);
}
public override UICollectionReusableView GetViewForSupplementaryElement(UICollectionView collectionView,
NSString elementKind, NSIndexPath indexPath)
{
var struc = base.GetViewForSupplementaryElement(collectionView, elementKind, indexPath);
if(struc != null)
{
return struc;
}
var reuseId = DetermineViewReuseId(elementKind);
var view = collectionView.DequeueReusableSupplementaryView(elementKind, reuseId, indexPath) as UICollectionReusableView;
@ -116,12 +117,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
// }
}
string DetermineViewReuseId(NSString elementKind)
{
return DetermineViewReuseId(elementKind == UICollectionElementKindSectionKey.Header
? ItemsView.GroupHeaderTemplate
: ItemsView.GroupFooterTemplate);
}
string DetermineViewReuseId(DataTemplate template)
{

Просмотреть файл

@ -0,0 +1,29 @@
#nullable disable
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using Microsoft.Maui.Controls.Handlers.Items;
using UIKit;
namespace Microsoft.Maui.Controls.Handlers.Items2;
internal static class ItemsSourceFactory2
{
public static ILoopItemsViewSource CreateForCarouselView(IEnumerable itemsSource, UICollectionViewController collectionViewController, bool loop)
{
if (itemsSource == null)
{
return new EmptySource();
}
return itemsSource switch
{
IList _ when itemsSource is INotifyCollectionChanged => new LoopObservableItemsSource2(itemsSource as IList, collectionViewController, loop),
IEnumerable _ when itemsSource is INotifyCollectionChanged => new LoopObservableItemsSource2(itemsSource as IEnumerable, collectionViewController, loop),
IEnumerable<object> generic => new LoopListSource2(generic, loop),
_ => new LoopListSource(itemsSource, loop),
};
}
}

Просмотреть файл

@ -3,10 +3,12 @@ using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using CoreGraphics;
using Foundation;
using Microsoft.Maui.Controls.Internals;
using Microsoft.Maui.Graphics;
using PassKit;
using UIKit;
namespace Microsoft.Maui.Controls.Handlers.Items2
@ -32,7 +34,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
bool _isEmpty = true;
bool _emptyViewDisplayed;
bool _disposed;
[UnconditionalSuppressMessage("Memory", "MEM0002", Justification = "Proven safe in test: MemoryTests.HandlerDoesNotLeak")]
UIView _emptyUIView;
VisualElement _emptyViewFormsElement;
@ -43,12 +45,11 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
protected UICollectionViewScrollDirection ScrollDirection { get; private set; } =
UICollectionViewScrollDirection.Vertical;
protected ItemsViewController2(TItemsView itemsView, UICollectionViewLayout layout) : base(layout)
{
_itemsView = new(itemsView);
ItemsViewLayout = layout;
}
public void UpdateLayout(UICollectionViewLayout newLayout)
@ -104,20 +105,21 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
{
var cell = collectionView.DequeueReusableCell(DetermineCellReuseId(indexPath), indexPath) as UICollectionViewCell;
// We need to get the index path that is adjusted for the item source
// Some ItemsView like CarouselView have a loop feature that will make the index path different from the item source
var indexpathAdjusted = GetAdjustedIndexPathForItemSource(indexPath);
if (cell is TemplatedCell2 TemplatedCell2)
{
//var virtualView = ItemsView.ItemTemplate.CreateContent() as View;
TemplatedCell2.ScrollDirection = ScrollDirection;
//var nativeView = virtualView!.ToPlatform(ItemsView.FindMauiContext()!);
var indexpathAdjusted = GetAdjustedIndexPathForItemSource(indexPath);
TemplatedCell2.Bind(ItemsView.ItemTemplate, ItemsSource[indexpathAdjusted], ItemsView);
TemplatedCell2.Bind(ItemsView.ItemTemplate, ItemsSource[indexpathAdjusted], ItemsView);
}
else if (cell is DefaultCell2 DefaultCell2)
{
DefaultCell2.Label.Text = ItemsSource[indexPath].ToString();
DefaultCell2.Label.Text = ItemsSource[indexpathAdjusted].ToString();
}
return cell;
}
@ -133,7 +135,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
var wasEmpty = _isEmpty;
_isEmpty = ItemsSource.ItemCount == 0;
if (wasEmpty != _isEmpty)
{
UpdateEmptyViewVisibility(_isEmpty);
@ -183,15 +185,13 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
collectionView.SetCustomDelegate(this);
CollectionView = collectionView;
}
public override void ViewWillLayoutSubviews()
{
base.ViewWillLayoutSubviews();
LayoutEmptyView();
}
void Items.MauiCollectionView.ICustomMauiCollectionViewDelegate.MovedToWindow(UIView view)
{
if (CollectionView?.Window != null)
@ -254,7 +254,8 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
// }
// _previousContentSize = contentSize.Value;
// }
const int HeaderTag = 111;
// internal Size? GetSize()
// {
@ -262,8 +263,15 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
// {
// return _emptyUIView.Frame.Size.ToSize();
// }
//
// return CollectionView.CollectionViewLayout.CollectionViewContentSize.ToSize();
// nfloat headerHeight = 0;
// var headerView = CollectionView.ViewWithTag(HeaderTag);
// if (headerView != null)
// headerHeight = headerView.Frame.Height;
// var sizeColl = CollectionView.CollectionViewLayout.CollectionViewContentSize;
// return sizeColl.ToSize();
// }
// void ConstrainItemsToBounds()
@ -281,7 +289,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
}
_initialized = true;
Delegator = CreateDelegator();
CollectionView.Delegate = Delegator;
@ -328,8 +336,8 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
CheckForEmptySource();
return ItemsSource.GroupCount;
}
public virtual NSIndexPath GetIndexForItem(object item)
{
return ItemsSource.GetIndexForItem(item);
@ -340,58 +348,14 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
return ItemsSource[index];
}
[UnconditionalSuppressMessage("Memory", "MEM0003", Justification = "Proven safe in test: CollectionViewTests.ItemsSourceDoesNotLeak")]
void CellContentSizeChanged(object sender, EventArgs e)
{
if (_disposed)
return;
if (!(sender is TemplatedCell2 cell))
{
return;
}
var visibleCells = CollectionView.VisibleCells;
for (int n = 0; n < visibleCells.Length; n++)
{
if (cell == visibleCells[n])
{
ItemsViewLayout?.InvalidateLayout();
return;
}
}
}
// [UnconditionalSuppressMessage("Memory", "MEM0003", Justification = "Proven safe in test: CollectionViewTests.ItemsSourceDoesNotLeak")]
// void CellLayoutAttributesChanged(object sender, LayoutAttributesChangedEventArgs2 args)
// {
// CacheCellAttributes(args.NewAttributes.IndexPath, args.NewAttributes.Size);
// }
//
// protected virtual void CacheCellAttributes(NSIndexPath indexPath, CGSize size)
// {
// if (!ItemsSource.IsIndexPathValid(indexPath))
// {
// // The upate might be coming from a cell that's being removed; don't cache it.
// return;
// }
//
// var item = ItemsSource[indexPath];
// if (item != null)
// {
// ItemsViewLayout.CacheCellSize(item, size);
// }
// }
protected virtual string DetermineCellReuseId(NSIndexPath indexPath)
{
if (ItemsView.ItemTemplate != null)
{
var item = ItemsSource[indexPath];
var dataTemplate = ItemsView.ItemTemplate.SelectDataTemplate(item, ItemsView);
var cellType = typeof(TemplatedCell2);
var orientation = ScrollDirection == UICollectionViewScrollDirection.Horizontal ? "Horizontal" : "Vertical";
@ -410,21 +374,6 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
return ScrollDirection == UICollectionViewScrollDirection.Horizontal ? HorizontalDefaultCell2.ReuseId : VerticalDefaultCell2.ReuseId;
}
//[Obsolete("Use DetermineCellReuseId(NSIndexPath indexPath) instead.")]
//protected virtual string DetermineCellReuseId()
//{
// if (ItemsView.ItemTemplate != null)
// {
// return ScrollDirection == UICollectionViewScrollDirection.Horizontal
// ? HorizontalCell2.ReuseId
// : VerticalCell2.ReuseId;
// }
// return ScrollDirection == UICollectionViewScrollDirection.Horizontal
// ? HorizontalDefaultCell2.ReuseId
// : VerticalDefaultCell2.ReuseId;
//}
protected virtual void RegisterViewTypes()
{
CollectionView.RegisterClassForCell(typeof(HorizontalDefaultCell2), HorizontalDefaultCell2.ReuseId);
@ -441,7 +390,6 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
CollectionView.Frame.Width, CollectionView.Frame.Height);
}
internal void UpdateView(object view, DataTemplate viewTemplate, ref UIView uiView, ref VisualElement formsElement)
{
@ -452,11 +400,11 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
{
//Platform.GetRenderer(formsElement)?.DisposeRendererAndChildren();
}
uiView?.Dispose();
uiView = null;
formsElement = null;
}
else
@ -597,7 +545,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
if (_emptyViewFormsElement != null && ((IElementController)ItemsView).LogicalChildren.IndexOf(_emptyViewFormsElement) != -1)
_emptyViewFormsElement.Layout(frame.ToRectangle());
}
internal protected virtual void UpdateVisibility()
{
if (ItemsView.IsVisible)

Просмотреть файл

@ -9,20 +9,20 @@ namespace Microsoft.Maui.Controls.Handlers.Items2;
internal static class LayoutFactory2
{
public static UICollectionViewLayout CreateList(LinearItemsLayout linearItemsLayout,
LayoutGroupingInfo groupingInfo)
LayoutGroupingInfo groupingInfo, LayoutHeaderFooterInfo headerFooterInfo)
=> linearItemsLayout.Orientation == ItemsLayoutOrientation.Vertical
? CreateVerticalList(linearItemsLayout, groupingInfo)
: CreateHorizontalList(linearItemsLayout, groupingInfo);
? CreateVerticalList(linearItemsLayout, groupingInfo, headerFooterInfo)
: CreateHorizontalList(linearItemsLayout, groupingInfo, headerFooterInfo);
public static UICollectionViewLayout CreateGrid(GridItemsLayout gridItemsLayout, LayoutGroupingInfo groupingInfo)
=> gridItemsLayout.Orientation == ItemsLayoutOrientation.Vertical
? CreateVerticalGrid(gridItemsLayout, groupingInfo)
: CreateHorizontalGrid(gridItemsLayout, groupingInfo);
static NSCollectionLayoutBoundarySupplementaryItem[] CreateSupplementaryItems(LayoutGroupingInfo groupingInfo,
static NSCollectionLayoutBoundarySupplementaryItem[] CreateSupplementaryItems(LayoutGroupingInfo? groupingInfo, LayoutHeaderFooterInfo? layoutHeaderFooterInfo,
UICollectionViewScrollDirection scrollDirection, NSCollectionLayoutDimension width, NSCollectionLayoutDimension height)
{
if (groupingInfo.IsGrouped)
if (groupingInfo is not null && groupingInfo.IsGrouped)
{
var items = new List<NSCollectionLayoutBoundarySupplementaryItem>();
@ -49,14 +49,44 @@ internal static class LayoutFactory2
return items.ToArray();
}
if (layoutHeaderFooterInfo is not null)
{
var items = new List<NSCollectionLayoutBoundarySupplementaryItem>();
if (layoutHeaderFooterInfo.HasHeader)
{
items.Add(NSCollectionLayoutBoundarySupplementaryItem.Create(
NSCollectionLayoutSize.Create(width, height),
UICollectionElementKindSectionKey.Header.ToString(),
scrollDirection == UICollectionViewScrollDirection.Vertical
? NSRectAlignment.Top
: NSRectAlignment.Leading));
};
if (layoutHeaderFooterInfo.HasFooter)
{
items.Add(NSCollectionLayoutBoundarySupplementaryItem.Create(
NSCollectionLayoutSize.Create(width, height),
UICollectionElementKindSectionKey.Footer.ToString(),
scrollDirection == UICollectionViewScrollDirection.Vertical
? NSRectAlignment.Bottom
: NSRectAlignment.Trailing));
}
return items.ToArray();
}
return [];
}
static UICollectionViewLayout CreateListLayout(UICollectionViewScrollDirection scrollDirection, LayoutGroupingInfo groupingInfo, LayoutSnapInfo snapInfo, NSCollectionLayoutDimension itemWidth, NSCollectionLayoutDimension itemHeight, NSCollectionLayoutDimension groupWidth, NSCollectionLayoutDimension groupHeight, double itemSpacing, Func<Thickness>? peekAreaInsetsFunc)
static UICollectionViewLayout CreateListLayout(UICollectionViewScrollDirection scrollDirection, LayoutGroupingInfo groupingInfo, LayoutHeaderFooterInfo layoutHeaderFooterInfo, LayoutSnapInfo snapInfo, NSCollectionLayoutDimension itemWidth, NSCollectionLayoutDimension itemHeight, NSCollectionLayoutDimension groupWidth, NSCollectionLayoutDimension groupHeight, double itemSpacing, Func<Thickness>? peekAreaInsetsFunc)
{
var layoutConfiguration = new UICollectionViewCompositionalLayoutConfiguration();
layoutConfiguration.ScrollDirection = scrollDirection;
//create global header and footer
layoutConfiguration.BoundarySupplementaryItems = CreateSupplementaryItems(null, layoutHeaderFooterInfo, scrollDirection, groupWidth, groupHeight);
var layout = new CustomUICollectionViewCompositionalLayout(snapInfo, (sectionIndex, environment) =>
{
// Each item has a size
@ -94,8 +124,10 @@ internal static class LayoutFactory2
var section = NSCollectionLayoutSection.Create(group: group);
section.InterGroupSpacing = new NFloat(itemSpacing);
// Create header and footer for group
section.BoundarySupplementaryItems = CreateSupplementaryItems(
groupingInfo,
null,
scrollDirection,
groupWidth,
groupHeight);
@ -147,6 +179,7 @@ internal static class LayoutFactory2
section.BoundarySupplementaryItems = CreateSupplementaryItems(
groupingInfo,
null, // No header/footer in grid
scrollDirection,
groupWidth,
groupHeight);
@ -158,9 +191,10 @@ internal static class LayoutFactory2
}
public static UICollectionViewLayout CreateVerticalList(LinearItemsLayout linearItemsLayout,
LayoutGroupingInfo groupingInfo)
LayoutGroupingInfo groupingInfo, LayoutHeaderFooterInfo headerFooterInfo)
=> CreateListLayout(UICollectionViewScrollDirection.Vertical,
groupingInfo,
headerFooterInfo,
new LayoutSnapInfo { SnapType = linearItemsLayout.SnapPointsType, SnapAligment = linearItemsLayout.SnapPointsAlignment },
// Fill the width
NSCollectionLayoutDimension.CreateFractionalWidth(1f),
@ -173,9 +207,10 @@ internal static class LayoutFactory2
public static UICollectionViewLayout CreateHorizontalList(LinearItemsLayout linearItemsLayout,
LayoutGroupingInfo groupingInfo)
LayoutGroupingInfo groupingInfo, LayoutHeaderFooterInfo headerFooterInfo)
=> CreateListLayout(UICollectionViewScrollDirection.Horizontal,
groupingInfo,
headerFooterInfo,
new LayoutSnapInfo { SnapType = linearItemsLayout.SnapPointsType, SnapAligment = linearItemsLayout.SnapPointsAlignment },
// Dynamic, estimated width
NSCollectionLayoutDimension.CreateEstimated(30f),
@ -186,29 +221,6 @@ internal static class LayoutFactory2
linearItemsLayout.ItemSpacing,
null);
public static UICollectionViewLayout CreateVerticalCarousel(LinearItemsLayout linearItemsLayout, Func<Thickness> peekAreaInsets)
=> CreateListLayout(UICollectionViewScrollDirection.Vertical,
new LayoutGroupingInfo { IsGrouped = false, HasHeader = false, HasFooter = false },
new LayoutSnapInfo { SnapType = linearItemsLayout.SnapPointsType, SnapAligment = linearItemsLayout.SnapPointsAlignment },
// Fill the width and height
NSCollectionLayoutDimension.CreateFractionalWidth(1f),
NSCollectionLayoutDimension.CreateFractionalHeight(1f),
NSCollectionLayoutDimension.CreateFractionalWidth(1f),
NSCollectionLayoutDimension.CreateFractionalHeight(1f),
0d, peekAreaInsets);
public static UICollectionViewLayout CreateHorizontalCarousel(LinearItemsLayout linearItemsLayout, Func<Thickness> peekAreaInsets)
=> CreateListLayout(UICollectionViewScrollDirection.Horizontal,
new LayoutGroupingInfo { IsGrouped = false, HasHeader = false, HasFooter = false },
new LayoutSnapInfo { SnapType = linearItemsLayout.SnapPointsType, SnapAligment = linearItemsLayout.SnapPointsAlignment },
// Fill the width and height
NSCollectionLayoutDimension.CreateFractionalWidth(1f),
NSCollectionLayoutDimension.CreateFractionalHeight(1f),
NSCollectionLayoutDimension.CreateFractionalWidth(1f),
NSCollectionLayoutDimension.CreateFractionalHeight(1f),
0d, peekAreaInsets);
public static UICollectionViewLayout CreateVerticalGrid(GridItemsLayout gridItemsLayout,
LayoutGroupingInfo groupingInfo)
=> CreateGridLayout(UICollectionViewScrollDirection.Vertical,

Просмотреть файл

@ -1,6 +1,8 @@
#nullable disable
using System;
using CoreGraphics;
using Foundation;
using Microsoft.Maui.Controls.Handlers.Items;
using ObjCRuntime;
using UIKit;
@ -14,17 +16,19 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
bool _disposed;
UIView _headerUIView;
VisualElement _headerViewFormsElement;
UIView _footerUIView;
VisualElement _footerViewFormsElement;
public StructuredItemsViewController2(TItemsView structuredItemsView, UICollectionViewLayout layout)
: base(structuredItemsView, layout)
{
}
protected override void RegisterViewTypes()
{
base.RegisterViewTypes();
RegisterSupplementaryViews(UICollectionElementKindSection.Header);
RegisterSupplementaryViews(UICollectionElementKindSection.Footer);
}
protected override void Dispose(bool disposing)
{
if (_disposed)
@ -36,20 +40,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
if (disposing)
{
if (_headerViewFormsElement != null)
{
//_headerViewFormsElement.MeasureInvalidated -= OnFormsElementMeasureInvalidated;
}
if (_footerViewFormsElement != null)
{
//_footerViewFormsElement.MeasureInvalidated -= OnFormsElementMeasureInvalidated;
}
_headerUIView = null;
_headerViewFormsElement = null;
_footerUIView = null;
_footerViewFormsElement = null;
}
base.Dispose(disposing);
@ -57,6 +48,114 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
protected override bool IsHorizontal => (ItemsView?.ItemsLayout as ItemsLayout)?.Orientation == ItemsLayoutOrientation.Horizontal;
public override UICollectionReusableView GetViewForSupplementaryElement(UICollectionView collectionView,
NSString elementKind, NSIndexPath indexPath)
{
var reuseId = DetermineViewReuseId(elementKind);
var view = collectionView.DequeueReusableSupplementaryView(elementKind, reuseId, indexPath) as UICollectionReusableView;
switch (view)
{
case DefaultCell2 defaultCell:
UpdateDefaultSupplementaryView(defaultCell, elementKind);
break;
case TemplatedCell2 templatedCell:
UpdateTemplatedSupplementaryView(templatedCell, elementKind);
break;
}
return view;
}
private protected void RegisterSupplementaryViews(UICollectionElementKindSection kind)
{
if (IsHorizontal)
{
CollectionView.RegisterClassForSupplementaryView(typeof(HorizontalSupplementaryView2),
kind, HorizontalSupplementaryView2.ReuseId);
CollectionView.RegisterClassForSupplementaryView(typeof(HorizontalDefaultSupplementalView2),
kind, HorizontalDefaultSupplementalView2.ReuseId);
}
else
{
CollectionView.RegisterClassForSupplementaryView(typeof(VerticalSupplementaryView2),
kind, VerticalSupplementaryView2.ReuseId);
CollectionView.RegisterClassForSupplementaryView(typeof(VerticalDefaultSupplementalView2),
kind, VerticalDefaultSupplementalView2.ReuseId);
}
}
string DetermineViewReuseId(NSString elementKind)
{
return DetermineViewReuseId(elementKind == UICollectionElementKindSectionKey.Header
? ItemsView.HeaderTemplate
: ItemsView.FooterTemplate, elementKind == UICollectionElementKindSectionKey.Header
? ItemsView.Header
: ItemsView.Footer);
}
void UpdateDefaultSupplementaryView(DefaultCell2 cell, NSString elementKind)
{
var obj = elementKind == UICollectionElementKindSectionKey.Header
? ItemsView.Header
: ItemsView.Footer;
cell.Label.Text = obj?.ToString();
}
void UpdateTemplatedSupplementaryView(TemplatedCell2 cell, NSString elementKind)
{
bool isHeader = elementKind == UICollectionElementKindSectionKey.Header;
if(isHeader)
{
if(ItemsView.Header is View headerView)
{
cell.Bind(headerView, ItemsView);
}
else if(ItemsView.HeaderTemplate is not null)
{
cell.Bind(ItemsView.HeaderTemplate, ItemsView.Header, ItemsView);
}
cell.Tag = HeaderTag;
}
else
{
if(ItemsView.Footer is View footerView)
{
cell.Bind(footerView, ItemsView);
}
else if(ItemsView.FooterTemplate is not null)
{
cell.Bind(ItemsView.FooterTemplate, ItemsView.Footer, ItemsView);
}
cell.Tag = FooterTag;
}
}
string DetermineViewReuseId(DataTemplate template, object item)
{
if (template == null)
{
if (item is View)
{
// No template, but we can fall back to the view
return IsHorizontal
? HorizontalSupplementaryView2.ReuseId
: VerticalSupplementaryView2.ReuseId;
}
// No template, no item, fall back to the default supplemental views
return IsHorizontal
? HorizontalDefaultSupplementalView2.ReuseId
: VerticalDefaultSupplementalView2.ReuseId;
}
return IsHorizontal
? HorizontalSupplementaryView2.ReuseId
: VerticalSupplementaryView2.ReuseId;
}
protected override CGRect DetermineEmptyViewFrame()
{
nfloat headerHeight = 0;
@ -78,152 +177,6 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
public override void ViewWillLayoutSubviews()
{
base.ViewWillLayoutSubviews();
// This update is only relevant if you have a footer view because it's used to place the footer view
// based on the ContentSize so we just update the positions if the ContentSize has changed
if (_footerUIView != null)
{
var emptyView = CollectionView.ViewWithTag(EmptyTag);
if (IsHorizontal)
{
if (_footerUIView.Frame.X != ItemsViewLayout.CollectionViewContentSize.Width ||
_footerUIView.Frame.X < emptyView?.Frame.X)
UpdateHeaderFooterPosition();
}
else
{
if (_footerUIView.Frame.Y != ItemsViewLayout.CollectionViewContentSize.Height ||
_footerUIView.Frame.Y < (emptyView?.Frame.Y + emptyView?.Frame.Height))
UpdateHeaderFooterPosition();
}
}
}
internal void UpdateFooterView()
{
UpdateSubview(ItemsView?.Footer, ItemsView?.FooterTemplate, FooterTag,
ref _footerUIView, ref _footerViewFormsElement);
UpdateHeaderFooterPosition();
}
internal void UpdateHeaderView()
{
UpdateSubview(ItemsView?.Header, ItemsView?.HeaderTemplate, HeaderTag,
ref _headerUIView, ref _headerViewFormsElement);
UpdateHeaderFooterPosition();
}
internal void UpdateSubview(object view, DataTemplate viewTemplate, nint viewTag, ref UIView uiView, ref VisualElement formsElement)
{
uiView?.RemoveFromSuperview();
if (formsElement != null)
{
ItemsView.RemoveLogicalChild(formsElement);
//formsElement.MeasureInvalidated -= OnFormsElementMeasureInvalidated;
}
UpdateView(view, viewTemplate, ref uiView, ref formsElement);
if (uiView != null)
{
uiView.Tag = viewTag;
CollectionView.AddSubview(uiView);
}
if (formsElement != null)
{
ItemsView.AddLogicalChild(formsElement);
}
if (formsElement != null)
{
//RemeasureLayout(formsElement);
//formsElement.MeasureInvalidated += OnFormsElementMeasureInvalidated;
}
else
{
uiView?.SizeToFit();
}
}
void UpdateHeaderFooterPosition()
{
var emptyView = CollectionView.ViewWithTag(EmptyTag);
if (IsHorizontal)
{
var currentInset = CollectionView.ContentInset;
nfloat headerWidth = _headerUIView?.Frame.Width ?? 0f;
nfloat footerWidth = _footerUIView?.Frame.Width ?? 0f;
nfloat emptyWidth = emptyView?.Frame.Width ?? 0f;
if (_headerUIView != null && _headerUIView.Frame.X != headerWidth)
{
_headerUIView.Frame = new CoreGraphics.CGRect(-headerWidth, 0, headerWidth, CollectionView.Frame.Height);
}
if (_footerUIView != null && (_footerUIView.Frame.X != ItemsViewLayout.CollectionViewContentSize.Width || emptyWidth > 0))
_footerUIView.Frame = new CoreGraphics.CGRect(ItemsViewLayout.CollectionViewContentSize.Width + emptyWidth, 0, footerWidth, CollectionView.Frame.Height);
if (CollectionView.ContentInset.Left != headerWidth || CollectionView.ContentInset.Right != footerWidth)
{
var currentOffset = CollectionView.ContentOffset;
CollectionView.ContentInset = new UIEdgeInsets(0, headerWidth, 0, footerWidth);
var xOffset = currentOffset.X + (currentInset.Left - CollectionView.ContentInset.Left);
if (CollectionView.ContentSize.Width + headerWidth <= CollectionView.Bounds.Width)
xOffset = -headerWidth;
// if the header grows it will scroll off the screen because if you change the content inset iOS adjusts the content offset so the list doesn't move
// this changes the offset of the list by however much the header size has changed
CollectionView.ContentOffset = new CoreGraphics.CGPoint(xOffset, CollectionView.ContentOffset.Y);
}
}
else
{
var currentInset = CollectionView.ContentInset;
nfloat headerHeight = _headerUIView?.Frame.Height ?? 0f;
nfloat footerHeight = _footerUIView?.Frame.Height ?? 0f;
nfloat emptyHeight = emptyView?.Frame.Height ?? 0f;
if (CollectionView.ContentInset.Top != headerHeight || CollectionView.ContentInset.Bottom != footerHeight)
{
var currentOffset = CollectionView.ContentOffset;
CollectionView.ContentInset = new UIEdgeInsets(headerHeight, 0, footerHeight, 0);
// if the header grows it will scroll off the screen because if you change the content inset iOS adjusts the content offset so the list doesn't move
// this changes the offset of the list by however much the header size has changed
var yOffset = currentOffset.Y + (currentInset.Top - CollectionView.ContentInset.Top);
if (CollectionView.ContentSize.Height + headerHeight <= CollectionView.Bounds.Height)
yOffset = -headerHeight;
CollectionView.ContentOffset = new CoreGraphics.CGPoint(CollectionView.ContentOffset.X, yOffset);
}
if (_headerUIView != null && _headerUIView.Frame.Y != headerHeight)
{
_headerUIView.Frame = new CoreGraphics.CGRect(0, -headerHeight, CollectionView.Frame.Width, headerHeight);
}
nfloat height = 0;
if (IsViewLoaded && View.Window != null)
{
height = ItemsViewLayout.CollectionViewContentSize.Height;
}
if (_footerUIView != null && (_footerUIView.Frame.Y != height || emptyHeight > 0))
{
_footerUIView.Frame = new CoreGraphics.CGRect(0, height + emptyHeight, CollectionView.Frame.Width, footerHeight);
}
}
}
}
}

Просмотреть файл

@ -12,7 +12,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
public class TemplatedCell2 : ItemsViewCell2
{
internal const string ReuseId = "Microsoft.Maui.Controls.TemplatedCell2";
readonly WeakEventManager _weakEventManager = new();
public event EventHandler<EventArgs> ContentSizeChanged
@ -51,13 +51,13 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
{
}
public UICollectionViewScrollDirection ScrollDirection { get; set; }
internal IPlatformViewHandler PlatformHandler { get; set; }
internal IPlatformViewHandler PlatformHandler { get; set; }
internal UIView PlatformView { get; set; }
internal void Unbind()
{
if (PlatformHandler?.VirtualView is View view)
@ -71,14 +71,14 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
UICollectionViewLayoutAttributes layoutAttributes)
{
var preferredAttributes = base.PreferredLayoutAttributesFittingAttributes(layoutAttributes);
if (PlatformHandler?.VirtualView is not null)
{
if (ScrollDirection == UICollectionViewScrollDirection.Vertical)
{
var measure =
PlatformHandler.VirtualView.Measure(preferredAttributes.Size.Width, double.PositiveInfinity);
preferredAttributes.Frame =
new CGRect(preferredAttributes.Frame.X, preferredAttributes.Frame.Y,
preferredAttributes.Frame.Width, measure.Height);
@ -87,15 +87,15 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
{
var measure =
PlatformHandler.VirtualView.Measure(double.PositiveInfinity, preferredAttributes.Size.Height);
preferredAttributes.Frame =
new CGRect(preferredAttributes.Frame.X, preferredAttributes.Frame.Y,
measure.Width, preferredAttributes.Frame.Height);
}
preferredAttributes.ZIndex = 2;
}
return preferredAttributes;
}
@ -104,7 +104,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
//Unbind();
base.PrepareForReuse();
}
public void Bind(DataTemplate template, object bindingContext, ItemsView itemsView)
{
if (PlatformHandler is null)
@ -113,22 +113,46 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
var mauiContext = itemsView.FindMauiContext()!;
var nativeView = virtualView!.ToPlatform(mauiContext);
PlatformView = nativeView;
PlatformHandler = virtualView.Handler as IPlatformViewHandler;
InitializeContentConstraints(nativeView);
virtualView.BindingContext = bindingContext;
}
if (PlatformHandler?.VirtualView is View view)
{
view.SetValueFromRenderer(BindableObject.BindingContextProperty, bindingContext);
}
}
public void Bind(View virtualView, ItemsView itemsView)
{
if (PlatformHandler is null && virtualView is not null)
{
var mauiContext = itemsView.FindMauiContext()!;
var nativeView = virtualView!.ToPlatform(mauiContext);
var mauiWrapperView = new UIContainerView2(virtualView, mauiContext);
PlatformView = mauiWrapperView;
PlatformHandler = virtualView.Handler as IPlatformViewHandler;
InitializeContentConstraints(mauiWrapperView);
virtualView.BindingContext = itemsView.BindingContext;
}
if (PlatformHandler?.VirtualView is View view)
{
view.SetValueFromRenderer(BindableObject.BindingContextProperty, itemsView.BindingContext);
}
}
bool IsUsingVSMForSelectionColor(View view)
{
var groups = VisualStateManager.GetVisualStateGroups(view);
@ -230,7 +254,7 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
{
return;
}
// Prevents the use of default color when there are VisualStateManager with Selected state setting the background color
// First we check whether the cell has the default selected background color; if it does, then we should check
// to see if the cell content is the VSM to set a selected color
@ -241,4 +265,42 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
}
}
}
class UIContainerView2 : UIView
{
readonly IView _view;
readonly IMauiContext _mauiContext;
public UIContainerView2(IView view, IMauiContext mauiContext)
{
_view = view;
_mauiContext = mauiContext;
UpdatePlatformView();
ClipsToBounds = true;
}
internal void UpdatePlatformView()
{
var handler = _view.ToHandler(_mauiContext);
var nativeView = _view.ToPlatform();
if (nativeView.Superview == this)
{
nativeView.RemoveFromSuperview();
}
AddSubview(nativeView);
}
public override void LayoutSubviews()
{
_view?.Arrange(new Rect(0, 0, Frame.Width, Frame.Height));
base.LayoutSubviews();
}
public override CGSize SizeThatFits(CGSize size)
{
return _view.Measure(size.Width, size.Height).ToCGSize();
}
}
}

Просмотреть файл

@ -20,15 +20,5 @@ namespace Microsoft.Maui.Controls.Handlers.Items2
Constraint.Priority = (float)UILayoutPriority.DefaultHigh;
Constraint.Active = true;
}
// public override void ConstrainTo(CGSize constraint)
// {
// Constraint.Constant = constraint.Width;
// }
//
// public override CGSize Measure()
// {
// return new CGSize(Constraint.Constant, Label.IntrinsicContentSize.Height);
// }
}
}

Просмотреть файл

@ -7590,7 +7590,6 @@ override Microsoft.Maui.Controls.ItemsView.OnBindingContextChanged() -> void
override Microsoft.Maui.Controls.ItemsView.OnMeasure(double widthConstraint, double heightConstraint) -> Microsoft.Maui.SizeRequest
override Microsoft.Maui.Controls.Label.OnBindingContextChanged() -> void
override Microsoft.Maui.Controls.Layout.InvalidateMeasureOverride() -> void
override Microsoft.Maui.Controls.Layout.Measure(double widthConstraint, double heightConstraint, Microsoft.Maui.Controls.MeasureFlags flags = Microsoft.Maui.Controls.MeasureFlags.None) -> Microsoft.Maui.SizeRequest
override Microsoft.Maui.Controls.LinearGradientBrush.IsEmpty.get -> bool
override Microsoft.Maui.Controls.ListView.OnBindingContextChanged() -> void
override Microsoft.Maui.Controls.ListView.OnMeasure(double widthConstraint, double heightConstraint) -> Microsoft.Maui.SizeRequest

Просмотреть файл

@ -4,8 +4,6 @@ const Microsoft.Maui.Controls.Handlers.Items2.ItemsViewController2<TItemsView>.E
const Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.FooterTag = 222 -> int
const Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.HeaderTag = 111 -> int
Microsoft.Maui.Controls.HandlerProperties
Microsoft.Maui.Controls.Handlers.Items2.CarouselTemplatedCell2
Microsoft.Maui.Controls.Handlers.Items2.CarouselTemplatedCell2.CarouselTemplatedCell2(CoreGraphics.CGRect frame) -> void
Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2
Microsoft.Maui.Controls.Handlers.Items2.CarouselViewDelegator2
Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2
@ -93,16 +91,12 @@ override Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.PreferredS
override Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.PrefersStatusBarHidden() -> bool
override Microsoft.Maui.Controls.GradientBrush.IsEmpty.get -> bool
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.IsHorizontal.get -> bool
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.RegisterViewTypes() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.UpdateItemsSource() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.UpdateVisibility() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.ViewDidLayoutSubviews() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.ViewDidLoad() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.ViewWillLayoutSubviews() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewDelegator2.GetVisibleItemsIndex() -> (bool VisibleItems, int First, int Center, int Last)
override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.CreateController(Microsoft.Maui.Controls.ReorderableItemsView! itemsView, UIKit.UICollectionViewLayout! layout) -> Microsoft.Maui.Controls.Handlers.Items2.ItemsViewController2<Microsoft.Maui.Controls.ReorderableItemsView!>!
override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.ScrollToRequested(object! sender, Microsoft.Maui.Controls.ScrollToRequestEventArgs! args) -> void
override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.SelectLayout() -> UIKit.UICollectionViewLayout!
override Microsoft.Maui.Controls.Handlers.Items2.GroupableItemsViewController2<TItemsView>.RegisterViewTypes() -> void
override Microsoft.Maui.Controls.Handlers.Items2.GroupableItemsViewController2<TItemsView>.UpdateItemsSource() -> void
override Microsoft.Maui.Controls.Handlers.Items2.ItemsViewController2<TItemsView>.Dispose(bool disposing) -> void
@ -113,6 +107,7 @@ override Microsoft.Maui.Controls.Handlers.Items2.ReorderableItemsViewController2
override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.DetermineEmptyViewFrame() -> CoreGraphics.CGRect
override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.Dispose(bool disposing) -> void
override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.IsHorizontal.get -> bool
override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.RegisterViewTypes() -> void
override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.ViewWillLayoutSubviews() -> void
override Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.PrepareForReuse() -> void
override Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.Selected.get -> bool
@ -204,16 +199,6 @@ Microsoft.Maui.Controls.TimeChangedEventArgs.TimeChangedEventArgs(System.TimeSpa
Microsoft.Maui.Controls.TimePicker.TimeSelected -> System.EventHandler<Microsoft.Maui.Controls.TimeChangedEventArgs>
static Microsoft.Maui.Controls.HandlerProperties.GetDisconnectPolicy(Microsoft.Maui.Controls.BindableObject! target) -> Microsoft.Maui.HandlerDisconnectPolicy
static Microsoft.Maui.Controls.HandlerProperties.SetDisconnectPolicy(Microsoft.Maui.Controls.BindableObject! target, Microsoft.Maui.HandlerDisconnectPolicy value) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapCanReorderItems(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.ReorderableItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapFooterTemplate(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.StructuredItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapHeaderTemplate(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.StructuredItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapIsGrouped(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.GroupableItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemSizingStrategy(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.StructuredItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemsLayout(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.StructuredItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemsSource(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.SelectableItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectedItem(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.SelectableItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectedItems(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.SelectableItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectionMode(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.SelectableItemsView! itemsView) -> void
static readonly Microsoft.Maui.Controls.HandlerProperties.DisconnectPolicyProperty -> Microsoft.Maui.Controls.BindableProperty!
override Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.PrefersHomeIndicatorAutoHidden.get -> bool
override Microsoft.Maui.Controls.Platform.Compatibility.ShellFlyoutRenderer.PreferredStatusBarUpdateAnimation.get -> UIKit.UIStatusBarAnimation
@ -303,6 +288,8 @@ Microsoft.Maui.Controls.Handlers.BoxViewHandler
Microsoft.Maui.Controls.Handlers.BoxViewHandler.BoxViewHandler() -> void
~Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.CarouselViewController2(Microsoft.Maui.Controls.CarouselView itemsView, UIKit.UICollectionViewLayout layout) -> void
~Microsoft.Maui.Controls.Handlers.Items2.CarouselViewDelegator2.CarouselViewDelegator2(UIKit.UICollectionViewLayout itemsViewLayout, Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2 ItemsViewController2) -> void
~Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.CarouselViewHandler2(Microsoft.Maui.PropertyMapper mapper = null) -> void
~Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.CollectionViewHandler2(Microsoft.Maui.PropertyMapper mapper = null) -> void
~Microsoft.Maui.Controls.Handlers.Items2.DefaultCell2.Constraint.get -> UIKit.NSLayoutConstraint
~Microsoft.Maui.Controls.Handlers.Items2.DefaultCell2.Constraint.set -> void
~Microsoft.Maui.Controls.Handlers.Items2.DefaultCell2.Label.get -> UIKit.UILabel
@ -344,6 +331,7 @@ Microsoft.Maui.Controls.Handlers.BoxViewHandler.BoxViewHandler() -> void
~Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>
~Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.StructuredItemsViewController2(TItemsView structuredItemsView, UIKit.UICollectionViewLayout layout) -> void
~Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.Bind(Microsoft.Maui.Controls.DataTemplate template, object bindingContext, Microsoft.Maui.Controls.ItemsView itemsView) -> void
~Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.Bind(Microsoft.Maui.Controls.View virtualView, Microsoft.Maui.Controls.ItemsView itemsView) -> void
~Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.CurrentTemplate.get -> Microsoft.Maui.Controls.DataTemplate
~Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.OnLayoutAttributesChanged(UIKit.UICollectionViewLayoutAttributes newAttributes) -> void
~Microsoft.Maui.Controls.InputView.FontFamily.get -> string
@ -365,6 +353,9 @@ Microsoft.Maui.Controls.Handlers.BoxViewHandler.BoxViewHandler() -> void
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.CreateController(Microsoft.Maui.Controls.CarouselView newElement, UIKit.UICollectionViewLayout layout) -> Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.ScrollToRequested(object sender, Microsoft.Maui.Controls.ScrollToRequestEventArgs args) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.SelectLayout() -> UIKit.UICollectionViewLayout
~override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.CreateController(Microsoft.Maui.Controls.ReorderableItemsView itemsView, UIKit.UICollectionViewLayout layout) -> Microsoft.Maui.Controls.Handlers.Items2.ItemsViewController2<Microsoft.Maui.Controls.ReorderableItemsView>
~override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.ScrollToRequested(object sender, Microsoft.Maui.Controls.ScrollToRequestEventArgs args) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.SelectLayout() -> UIKit.UICollectionViewLayout
~override Microsoft.Maui.Controls.Handlers.Items2.GroupableItemsViewController2<TItemsView>.CreateDelegator() -> UIKit.UICollectionViewDelegateFlowLayout
~override Microsoft.Maui.Controls.Handlers.Items2.GroupableItemsViewController2<TItemsView>.CreateItemsViewSource() -> Microsoft.Maui.Controls.Handlers.Items.IItemsViewSource
~override Microsoft.Maui.Controls.Handlers.Items2.GroupableItemsViewController2<TItemsView>.GetViewForSupplementaryElement(UIKit.UICollectionView collectionView, Foundation.NSString elementKind, Foundation.NSIndexPath indexPath) -> UIKit.UICollectionReusableView
@ -390,6 +381,7 @@ Microsoft.Maui.Controls.Handlers.BoxViewHandler.BoxViewHandler() -> void
~override Microsoft.Maui.Controls.Handlers.Items2.SelectableItemsViewController2<TItemsView>.ItemSelected(UIKit.UICollectionView collectionView, Foundation.NSIndexPath indexPath) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.SelectableItemsViewDelegator2<TItemsView, TViewController>.ItemDeselected(UIKit.UICollectionView collectionView, Foundation.NSIndexPath indexPath) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.SelectableItemsViewDelegator2<TItemsView, TViewController>.ItemSelected(UIKit.UICollectionView collectionView, Foundation.NSIndexPath indexPath) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.GetViewForSupplementaryElement(UIKit.UICollectionView collectionView, Foundation.NSString elementKind, Foundation.NSIndexPath indexPath) -> UIKit.UICollectionReusableView
~override Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.PreferredLayoutAttributesFittingAttributes(UIKit.UICollectionViewLayoutAttributes layoutAttributes) -> UIKit.UICollectionViewLayoutAttributes
~override Microsoft.Maui.Controls.ImageButton.OnPropertyChanged(string propertyName = null) -> void
~override Microsoft.Maui.Controls.Handlers.Compatibility.PhoneFlyoutPageRenderer.ViewWillTransitionToSize(CoreGraphics.CGSize toSize, UIKit.IUIViewControllerTransitionCoordinator coordinator) -> void
@ -408,13 +400,24 @@ override Microsoft.Maui.Controls.SearchBar.IsEnabledCore.get -> bool
~override Microsoft.Maui.Controls.Region.Equals(object obj) -> bool
~override Microsoft.Maui.Controls.Shapes.Matrix.Equals(object obj) -> bool
~override Microsoft.Maui.Controls.ShellContent.OnPropertyChanged(string propertyName = null) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselTemplatedCell2.ReuseId -> Foundation.NSString
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapCurrentItem(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapIsBounceEnabled(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapIsSwipeEnabled(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapLoop(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapPeekAreaInsets(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.Mapper -> Microsoft.Maui.PropertyMapper<Microsoft.Maui.Controls.CarouselView, Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2>
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapPosition(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapCanReorderItems(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.ReorderableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapFooterTemplate(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.StructuredItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapHeaderTemplate(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.StructuredItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapIsGrouped(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.GroupableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemSizingStrategy(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.StructuredItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemsLayout(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.StructuredItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemsSource(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.SelectableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.Mapper -> Microsoft.Maui.PropertyMapper<Microsoft.Maui.Controls.CollectionView, Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2>
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectedItem(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.SelectableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectedItems(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.SelectableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectionMode(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.SelectableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView>.ItemsViewMapper -> Microsoft.Maui.PropertyMapper<TItemsView, Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView>>
~static Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView>.MapEmptyView(Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView> handler, Microsoft.Maui.Controls.ItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView>.MapEmptyViewTemplate(Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView> handler, Microsoft.Maui.Controls.ItemsView itemsView) -> void
@ -592,4 +595,4 @@ Microsoft.Maui.Controls.StyleableElement.class.set -> void
*REMOVED*~Microsoft.Maui.Controls.NavigableElement.Style.get -> Microsoft.Maui.Controls.Style
*REMOVED*~Microsoft.Maui.Controls.NavigableElement.Style.set -> void
*REMOVED*~Microsoft.Maui.Controls.NavigableElement.StyleClass.get -> System.Collections.Generic.IList<string>
*REMOVED*~Microsoft.Maui.Controls.NavigableElement.StyleClass.set -> void
*REMOVED*~Microsoft.Maui.Controls.NavigableElement.StyleClass.set -> void

Просмотреть файл

@ -4,8 +4,6 @@ const Microsoft.Maui.Controls.Handlers.Items2.ItemsViewController2<TItemsView>.E
const Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.FooterTag = 222 -> int
const Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.HeaderTag = 111 -> int
Microsoft.Maui.Controls.HandlerProperties
Microsoft.Maui.Controls.Handlers.Items2.CarouselTemplatedCell2
Microsoft.Maui.Controls.Handlers.Items2.CarouselTemplatedCell2.CarouselTemplatedCell2(CoreGraphics.CGRect frame) -> void
Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2
Microsoft.Maui.Controls.Handlers.Items2.CarouselViewDelegator2
Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2
@ -90,16 +88,12 @@ override Microsoft.Maui.Controls.Handlers.Compatibility.CellRenderer.Invoke(stri
override Microsoft.Maui.Controls.Handlers.Compatibility.CellRenderer.UpdateValue(string! property) -> void
override Microsoft.Maui.Controls.GradientBrush.IsEmpty.get -> bool
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.IsHorizontal.get -> bool
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.RegisterViewTypes() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.UpdateItemsSource() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.UpdateVisibility() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.ViewDidLayoutSubviews() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.ViewDidLoad() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.ViewWillLayoutSubviews() -> void
override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewDelegator2.GetVisibleItemsIndex() -> (bool VisibleItems, int First, int Center, int Last)
override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.CreateController(Microsoft.Maui.Controls.ReorderableItemsView! itemsView, UIKit.UICollectionViewLayout! layout) -> Microsoft.Maui.Controls.Handlers.Items2.ItemsViewController2<Microsoft.Maui.Controls.ReorderableItemsView!>!
override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.ScrollToRequested(object! sender, Microsoft.Maui.Controls.ScrollToRequestEventArgs! args) -> void
override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.SelectLayout() -> UIKit.UICollectionViewLayout!
override Microsoft.Maui.Controls.Handlers.Items2.GroupableItemsViewController2<TItemsView>.RegisterViewTypes() -> void
override Microsoft.Maui.Controls.Handlers.Items2.GroupableItemsViewController2<TItemsView>.UpdateItemsSource() -> void
override Microsoft.Maui.Controls.Handlers.Items2.ItemsViewController2<TItemsView>.Dispose(bool disposing) -> void
@ -110,6 +104,7 @@ override Microsoft.Maui.Controls.Handlers.Items2.ReorderableItemsViewController2
override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.DetermineEmptyViewFrame() -> CoreGraphics.CGRect
override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.Dispose(bool disposing) -> void
override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.IsHorizontal.get -> bool
override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.RegisterViewTypes() -> void
override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.ViewWillLayoutSubviews() -> void
override Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.PrepareForReuse() -> void
override Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.Selected.get -> bool
@ -198,16 +193,6 @@ Microsoft.Maui.Controls.TimeChangedEventArgs.TimeChangedEventArgs(System.TimeSpa
Microsoft.Maui.Controls.TimePicker.TimeSelected -> System.EventHandler<Microsoft.Maui.Controls.TimeChangedEventArgs>
static Microsoft.Maui.Controls.HandlerProperties.GetDisconnectPolicy(Microsoft.Maui.Controls.BindableObject! target) -> Microsoft.Maui.HandlerDisconnectPolicy
static Microsoft.Maui.Controls.HandlerProperties.SetDisconnectPolicy(Microsoft.Maui.Controls.BindableObject! target, Microsoft.Maui.HandlerDisconnectPolicy value) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapCanReorderItems(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.ReorderableItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapFooterTemplate(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.StructuredItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapHeaderTemplate(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.StructuredItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapIsGrouped(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.GroupableItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemSizingStrategy(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.StructuredItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemsLayout(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.StructuredItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemsSource(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.SelectableItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectedItem(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.SelectableItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectedItems(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.SelectableItemsView! itemsView) -> void
static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectionMode(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2! handler, Microsoft.Maui.Controls.SelectableItemsView! itemsView) -> void
static readonly Microsoft.Maui.Controls.HandlerProperties.DisconnectPolicyProperty -> Microsoft.Maui.Controls.BindableProperty!
Microsoft.Maui.Controls.WebView.ProcessTerminated -> System.EventHandler<Microsoft.Maui.Controls.WebViewProcessTerminatedEventArgs>
Microsoft.Maui.Controls.WebViewProcessTerminatedEventArgs
@ -297,6 +282,8 @@ Microsoft.Maui.Controls.Handlers.BoxViewHandler
Microsoft.Maui.Controls.Handlers.BoxViewHandler.BoxViewHandler() -> void
~Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2.CarouselViewController2(Microsoft.Maui.Controls.CarouselView itemsView, UIKit.UICollectionViewLayout layout) -> void
~Microsoft.Maui.Controls.Handlers.Items2.CarouselViewDelegator2.CarouselViewDelegator2(UIKit.UICollectionViewLayout itemsViewLayout, Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2 ItemsViewController2) -> void
~Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.CarouselViewHandler2(Microsoft.Maui.PropertyMapper mapper = null) -> void
~Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.CollectionViewHandler2(Microsoft.Maui.PropertyMapper mapper = null) -> void
~Microsoft.Maui.Controls.Handlers.Items2.DefaultCell2.Constraint.get -> UIKit.NSLayoutConstraint
~Microsoft.Maui.Controls.Handlers.Items2.DefaultCell2.Constraint.set -> void
~Microsoft.Maui.Controls.Handlers.Items2.DefaultCell2.Label.get -> UIKit.UILabel
@ -338,6 +325,7 @@ Microsoft.Maui.Controls.Handlers.BoxViewHandler.BoxViewHandler() -> void
~Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>
~Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.StructuredItemsViewController2(TItemsView structuredItemsView, UIKit.UICollectionViewLayout layout) -> void
~Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.Bind(Microsoft.Maui.Controls.DataTemplate template, object bindingContext, Microsoft.Maui.Controls.ItemsView itemsView) -> void
~Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.Bind(Microsoft.Maui.Controls.View virtualView, Microsoft.Maui.Controls.ItemsView itemsView) -> void
~Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.CurrentTemplate.get -> Microsoft.Maui.Controls.DataTemplate
~Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.OnLayoutAttributesChanged(UIKit.UICollectionViewLayoutAttributes newAttributes) -> void
~Microsoft.Maui.Controls.InputView.FontFamily.get -> string
@ -359,6 +347,9 @@ Microsoft.Maui.Controls.Handlers.BoxViewHandler.BoxViewHandler() -> void
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.CreateController(Microsoft.Maui.Controls.CarouselView newElement, UIKit.UICollectionViewLayout layout) -> Microsoft.Maui.Controls.Handlers.Items2.CarouselViewController2
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.ScrollToRequested(object sender, Microsoft.Maui.Controls.ScrollToRequestEventArgs args) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.SelectLayout() -> UIKit.UICollectionViewLayout
~override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.CreateController(Microsoft.Maui.Controls.ReorderableItemsView itemsView, UIKit.UICollectionViewLayout layout) -> Microsoft.Maui.Controls.Handlers.Items2.ItemsViewController2<Microsoft.Maui.Controls.ReorderableItemsView>
~override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.ScrollToRequested(object sender, Microsoft.Maui.Controls.ScrollToRequestEventArgs args) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.SelectLayout() -> UIKit.UICollectionViewLayout
~override Microsoft.Maui.Controls.Handlers.Items2.GroupableItemsViewController2<TItemsView>.CreateDelegator() -> UIKit.UICollectionViewDelegateFlowLayout
~override Microsoft.Maui.Controls.Handlers.Items2.GroupableItemsViewController2<TItemsView>.CreateItemsViewSource() -> Microsoft.Maui.Controls.Handlers.Items.IItemsViewSource
~override Microsoft.Maui.Controls.Handlers.Items2.GroupableItemsViewController2<TItemsView>.GetViewForSupplementaryElement(UIKit.UICollectionView collectionView, Foundation.NSString elementKind, Foundation.NSIndexPath indexPath) -> UIKit.UICollectionReusableView
@ -384,6 +375,7 @@ Microsoft.Maui.Controls.Handlers.BoxViewHandler.BoxViewHandler() -> void
~override Microsoft.Maui.Controls.Handlers.Items2.SelectableItemsViewController2<TItemsView>.ItemSelected(UIKit.UICollectionView collectionView, Foundation.NSIndexPath indexPath) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.SelectableItemsViewDelegator2<TItemsView, TViewController>.ItemDeselected(UIKit.UICollectionView collectionView, Foundation.NSIndexPath indexPath) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.SelectableItemsViewDelegator2<TItemsView, TViewController>.ItemSelected(UIKit.UICollectionView collectionView, Foundation.NSIndexPath indexPath) -> void
~override Microsoft.Maui.Controls.Handlers.Items2.StructuredItemsViewController2<TItemsView>.GetViewForSupplementaryElement(UIKit.UICollectionView collectionView, Foundation.NSString elementKind, Foundation.NSIndexPath indexPath) -> UIKit.UICollectionReusableView
~override Microsoft.Maui.Controls.Handlers.Items2.TemplatedCell2.PreferredLayoutAttributesFittingAttributes(UIKit.UICollectionViewLayoutAttributes layoutAttributes) -> UIKit.UICollectionViewLayoutAttributes
~override Microsoft.Maui.Controls.ImageButton.OnPropertyChanged(string propertyName = null) -> void
~override Microsoft.Maui.Controls.Handlers.Compatibility.PhoneFlyoutPageRenderer.ViewWillTransitionToSize(CoreGraphics.CGSize toSize, UIKit.IUIViewControllerTransitionCoordinator coordinator) -> void
@ -401,13 +393,24 @@ override Microsoft.Maui.Controls.SearchBar.IsEnabledCore.get -> bool
~Microsoft.Maui.Controls.WebView.UserAgent.set -> void
~override Microsoft.Maui.Controls.Region.Equals(object obj) -> bool
~override Microsoft.Maui.Controls.Shapes.Matrix.Equals(object obj) -> bool
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselTemplatedCell2.ReuseId -> Foundation.NSString
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapCurrentItem(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapIsBounceEnabled(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapIsSwipeEnabled(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapLoop(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapPeekAreaInsets(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.MapPosition(Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2 handler, Microsoft.Maui.Controls.CarouselView carouselView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2.Mapper -> Microsoft.Maui.PropertyMapper<Microsoft.Maui.Controls.CarouselView, Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2>
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapCanReorderItems(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.ReorderableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapFooterTemplate(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.StructuredItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapHeaderTemplate(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.StructuredItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapIsGrouped(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.GroupableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemSizingStrategy(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.StructuredItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemsLayout(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.StructuredItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapItemsSource(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.SelectableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.Mapper -> Microsoft.Maui.PropertyMapper<Microsoft.Maui.Controls.CollectionView, Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2>
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectedItem(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.SelectableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectedItems(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.SelectableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2.MapSelectionMode(Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2 handler, Microsoft.Maui.Controls.SelectableItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView>.ItemsViewMapper -> Microsoft.Maui.PropertyMapper<TItemsView, Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView>>
~static Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView>.MapEmptyView(Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView> handler, Microsoft.Maui.Controls.ItemsView itemsView) -> void
~static Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView>.MapEmptyViewTemplate(Microsoft.Maui.Controls.Handlers.Items2.ItemsViewHandler2<TItemsView> handler, Microsoft.Maui.Controls.ItemsView itemsView) -> void
@ -592,4 +595,4 @@ Microsoft.Maui.Controls.StyleableElement.class.set -> void
*REMOVED*~Microsoft.Maui.Controls.NavigableElement.Style.get -> Microsoft.Maui.Controls.Style
*REMOVED*~Microsoft.Maui.Controls.NavigableElement.Style.set -> void
*REMOVED*~Microsoft.Maui.Controls.NavigableElement.StyleClass.get -> System.Collections.Generic.IList<string>
*REMOVED*~Microsoft.Maui.Controls.NavigableElement.StyleClass.set -> void
*REMOVED*~Microsoft.Maui.Controls.NavigableElement.StyleClass.set -> void

Просмотреть файл

@ -84,7 +84,7 @@ namespace Maui.Controls.Sample.Issues
() =>
{
var image = new Image();
image.SetBinding(Image.SourceProperty, new Binding("."));
image.SetBinding(Image.SourceProperty, new Binding(nameof(PhotoItem.Image)));
return image;
}
)
@ -106,19 +106,18 @@ namespace Maui.Controls.Sample.Issues
Content = grid;
}
public ObservableCollection<string> Items { get; set; }
public ObservableCollection<PhotoItem> Items { get; set; }
public void LoadData()
{
var images = new List<string>();
var images = new List<PhotoItem>();
images.Add("oasis.jpg");
images.Add("dotnet_bot.jpg");
images.Add("shopping_cart.jpg");
images.Add("groceries.png");
for (int i = 0; i < 4; i++)
{
images.Add(new PhotoItem { Image = "oasis.jpg", Title = $"Title {i}" });
}
Items = new ObservableCollection<string>(images);
Items = new ObservableCollection<PhotoItem>(images);
Photos.ItemsSource = Items;
}
@ -134,5 +133,11 @@ namespace Maui.Controls.Sample.Issues
get; set;
}
}
class PhotoItem
{
public string Image { get; set; }
public string Title { get; set; }
}
}
}

Просмотреть файл

@ -3,13 +3,14 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Maui.Controls.Sample.Issues.Issue19379"
xmlns:ns="clr-namespace:Maui.Controls.Sample.Issues">
<VerticalStackLayout
<Grid
Padding="30,0"
Spacing="25">
RowSpacing="25"
RowDefinitions="Auto,*,Auto">
<Label
AutomationId="WaitForStubControl"
Text="Issue 19379"/>
<CollectionView
<CollectionView Grid.Row="1"
Header="{Binding CustomHeader, Mode=TwoWay}"
ItemsSource="{Binding ItemList}">
<CollectionView.HeaderTemplate>
@ -33,9 +34,9 @@
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<Button
<Button Grid.Row="2"
AutomationId="UpdateButton"
Text="Update the CollectionView header"
Clicked="Button_Clicked"/>
</VerticalStackLayout>
</Grid>
</ContentPage>

Просмотреть файл

@ -1,4 +1,4 @@
using System;
using System;
using Maui.Controls.Sample.Issues;
using Microsoft.Maui;
using Microsoft.Maui.Controls;
@ -29,6 +29,15 @@ namespace Maui.Controls.Sample
.Issue18720DatePickerAddMappers()
.Issue18720TimePickerAddMappers();
#if IOS || MACCATALYST
// appBuilder.ConfigureMauiHandlers(handlers =>
// {
// handlers.AddHandler<Microsoft.Maui.Controls.CollectionView, Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2>();
// handlers.AddHandler<Microsoft.Maui.Controls.CarouselView, Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2>();
// });
#endif
appBuilder.Services.AddTransient<TransientPage>();
appBuilder.Services.AddScoped<ScopedPage>();
return appBuilder.Build();

Просмотреть файл

@ -35,8 +35,9 @@ namespace Microsoft.Maui.TestCases.Tests
[Test]
[Category(UITestCategories.CarouselView)]
public void CarouselViewGoToNextCurrentItem()
public async Task CarouselViewGoToNextCurrentItem()
{
await Task.Delay(2000);
int indexToTest = 3;
var index = indexToTest.ToString();
var nextIndex = (indexToTest + 1).ToString();
@ -54,8 +55,9 @@ namespace Microsoft.Maui.TestCases.Tests
[Test]
[Category(UITestCategories.CarouselView)]
public void CarouselViewGoToPreviousCurrentItem()
public async Task CarouselViewGoToPreviousCurrentItem()
{
await Task.Delay(2000);
int indexToTest = 3;
var index = indexToTest.ToString();
var previousIndex = (indexToTest - 1).ToString();
@ -76,6 +78,7 @@ namespace Microsoft.Maui.TestCases.Tests
[Category(UITestCategories.CarouselView)]
public async Task CarouselViewKeepPositionChangingOrientation()
{
await Task.Delay(2000);
int indexToTest = 3;
var index = indexToTest.ToString();

Просмотреть файл

@ -17,14 +17,14 @@ namespace Microsoft.Maui.TestCases.Tests.Issues
// Issue10300 (src\ControlGallery\src\Issues.Shared\Issue10300.cs
[Test]
[Category(UITestCategories.CarouselView)]
[FailsOnIOS("Currently fails on iOS; see https://github.com/dotnet/maui/issues/19488")]
//[FailsOnIOS("Currently fails on iOS; see https://github.com/dotnet/maui/issues/19488")]
public void Issue10300Test()
{
App.Click("Add");
App.Click("Delete");
App.WaitForElement("Close");
App.Click("Close");
App.WaitForNoElement("2");
App.WaitForElement("2");
}
}
}

Просмотреть файл

@ -17,7 +17,7 @@ namespace Microsoft.Maui.TestCases.Tests.Issues
[Category(UITestCategories.CollectionView)]
[Category(UITestCategories.TabbedPage)]
[Category(UITestCategories.Compatibility)]
public void CollectionViewWithFooterShouldNotCrashOnDisplay()
public void CollectionViewWithFooterShouldNotNSRangeExceptionCrashOnDisplay()
{
// If this hasn't already crashed, the test is passing
App.FindElement("Success");

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 54 KiB

После

Ширина:  |  Высота:  |  Размер: 58 KiB