gpt4 book ai didi

c# - UIRefreshControl 显示在 UICollectionViews 单元格上方

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:13:20 26 4
gpt4 key购买 nike

我使用以下代码创建 UIRefreshControl:

_refreshControl = new UIRefreshControl();
_refreshControl.ValueChanged += RefreshTriggered;
_collectionView.InsertSubview(_refreshControl, 0);

而且我不知道为什么 UIRefreshControl 被绘制在 UICollectionViewCell 上。

这是我刚刚添加刷新控件时 UICollectionView 的 subview :

[0]: {<UIRefreshControl: 0x7c132fe0; frame = (0 0; 594 60); hidden = YES; autoresize = W; layer = <CALayer: 0x7c133250>>}
[1]: {<UIImageView: 0x79f8a5d0; frame = (3 588.5; 588 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x79f89a70>> - (null)}
[2]: {<UIImageView: 0x79fab7d0; frame = (588.5 584; 2.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x796171f0>> - (null)}

这是在 UICollectionView 中加载项目时的 subview :

[0]: {<MovieCollectionViewCell: 0x796e7350; baseClass = UICollectionViewCell; frame = (0 0; 183 278.16); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7c244bc0>>}
[1]: {<MovieCollectionViewCell: 0x7c2b5850; baseClass = UICollectionViewCell; frame = (186 0; 183 278.16); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7c2b5950>>}
[2]: {<MovieCollectionViewCell: 0x7c2ba7d0; baseClass = UICollectionViewCell; frame = (0 281; 183 278.16); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7c2ba8d0>>}
[3]: {<MovieCollectionViewCell: 0x7c2bf440; baseClass = UICollectionViewCell; frame = (186 281; 183 278.16); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7c2bf540>>}
[4]: {<MovieCollectionViewCell: 0x7c2c42d0; baseClass = UICollectionViewCell; frame = (0 562.5; 183 278.16); clipsToBounds = YES; hidden = YES; opaque = NO; layer = <CALayer: 0x7c2c43d0>>}
[5]: {<MovieCollectionViewCell: 0x7c2c9160; baseClass = UICollectionViewCell; frame = (186 562.5; 183 278.16); clipsToBounds = YES; hidden = YES; opaque = NO; layer = <CALayer: 0x7c2c9260>>}
[6]: {<UIRefreshControl: 0x7c132fe0; frame = (0 -69.5; 369 60); autoresize = W; layer = <CALayer: 0x7c133250>>}
[7]: {<UIImageView: 0x7c159e80; frame = (3 522; 363 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x7c159fb0>> - (null)}
[8]: {<UIImageView: 0x7c15a480; frame = (363.5 -66.5; 2.5 224); opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x7c15a5b0>> - (null)}

有什么想法吗?

最佳答案

像这样在布局过程之后尝试将 refreshControll 发送到后面:

- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];

[self.collectionView sendSubviewToBack:self.refreshControl];
}

因为 UITableViewUICollectionView 重用了它们的单元格,所以它们有一种非常特殊的方式来布置它们的 subview (可能通过自定义实现 layoutSubviews).因此,您插入自定义 subview 的位置通常不会在布局过程后保留。这就是为什么您必须覆盖 viewDidLayoutSubviews 并将您的 View 放回您想要的位置。

UIRefreshControllUITableView 自动检测并放回其他 subview 后面,但UICollectionView 不是这样,你必须这样做手动。对于任何其他自定义 subview ,您必须同时为 UITableViewUICollectionView 执行此操作。

关于c# - UIRefreshControl 显示在 UICollectionViews 单元格上方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34273670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com