gpt4 book ai didi

ios - 无法点击 UICollectionView 项目

转载 作者:行者123 更新时间:2023-11-28 21:34:07 24 4
gpt4 key购买 nike

我正在构建一个应用程序,而我有一个带有自定义布局的 UICollectionView。我有一个问题,但我无法点击某些行。这是对发生的事情的概述

1) 应用程序启动并呈现一个 UICollectionView

2)显示了3个测试项,使用Xcode中的可视化调试器,可以看到层级不对

enter image description here

现在无法点击红色行,但可以点击黄色和绿色行。

3) 用户点击黄色项,然后转到另一个页面

4) 用户弹出显示的 UIViewController 并返回到 UICollectionViewviewWillAppear 方法重新加载 UICollectionView像这样:

[self.collectionView reloadData];

5) 重新进入可视化调试器,层次结构似乎发生了偏移,黄色行现在不可点击,但红色和绿色行可以点击。

这可能是什么原因?我会发布任何相关代码,询问您希望看到哪些部分。

enter image description here

更新

UIViewController 显示 UICollectionView

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
ShareViewCell *view = [collectionView dequeueReusableCellWithReuseIdentifier:@"share" forIndexPath:indexPath];
view.share = [self.sharesController shareAtIndex:indexPath.item];
return view;
}

自定义单元格:

- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {

self.leftBorderView = [UIView new];
[self.contentView addSubview:self.leftBorderView];

self.label = [UILabel new];
self.label.font = [UIFont boldSystemFontOfSize:10];
self.label.numberOfLines = 0;
self.label.lineBreakMode = NSLineBreakByWordWrapping;
[self.contentView addSubview:self.label];
}
return self;
}

- (void)layoutSubviews
{
[super layoutSubviews];

self.leftBorderView.frame = CGRectMake(0, 0, 1.5, self.bounds.size.height);
CGSize labelSize = [self.label sizeThatFits:CGSizeMake(self.bounds.size.width - 10.0f, MAXFLOAT)];

NSTimeInterval durationOfShare = [self.share.endSpan timeIntervalSinceDate:self.share.startSpan] / 3600;

CGFloat middleOfCell = self.bounds.size.height / 2;
CGFloat yPositionToUse = middleOfCell - (labelSize.height / 2);

if (durationOfShare < 0.25)
{
[self.label setHidden:YES];// to small to be shown
} else if (durationOfShare > 0.5)
{
yPositionToUse = 8; // show it at the top
}

self.label.frame = CGRectMake(8, yPositionToUse, labelSize.width, labelSize.height);
}

更新 2

UICollectionReusableView 是否阻止了 UICollectionViewCell 的点击?

enter image description here

最佳答案

好的,

首先,您应该更准确地回答您的问题:您正在使用在 some question on StackOverflow 上找到的一些代码.

代码好像是这个Calendar UI made with UICollectionView .这是一个示例代码,为了 StackOverflow 的答案(有赏金)而快速构建。它没有完成,没有贡献者,您应该尝试阅读并改进它!

从调试器的捕获来看,您似乎有一些 View 覆盖在 collectionView 的单元格之上。通过阅读这段代码,我看到它使用一些补充 View 来呈现“小时” block 。这个补充 View 类是 HourReusableView。它是调试器捕获中最重要的 View

CalendarViewLayout 负责计算这些补充 View 框架,就像它对彩色事件 block 所做的那样(参见方法 - (void)prepareLayout)

我敢打赌,这些补充 View 的 Z 顺序是不可预测的——所有 View 的默认 zIndex 都是 0。一种解决方法?在line 67 of this file之后,在小时 block 的 UICollectionViewLayoutAttributes 上设置一个负的 zIndex。这样,您可以确保小时补充 View 始终在您的单元格后面,并且不会拦截单元格的触摸

关于ios - 无法点击 UICollectionView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34557663/

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