【问题标题】:UICollectionView created programmatically doesn't scroll以编程方式创建的 UICollectionView 不会滚动
【发布时间】:2023-04-01 01:56:01
【问题描述】:

我正在使用UICollectionView 制作一个水平选择器。这很简单:UIViewUICollectionView 以编程方式创建,使用 UICollectionViewFlowLayout 和一个部分,滚动设置为水平。它出现在屏幕上,并在正确的单元格中包含正确的数据。但它不滚动——事实上它根本不响应用户交互。

这是视图的初始化程序:

- (id)initWithFrame:(CGRect)frame andItemData:(NSArray *)itemData
{
    self = [super initWithFrame:frame];
    if (self) {
        _itemData = itemData;

        UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
        [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
        [flowLayout setItemSize:CGSizeMake(kCellWidth, kCellHeight)];
        [flowLayout setMinimumInteritemSpacing:0.f];
        [flowLayout setMinimumLineSpacing:0.f];

        _collectionView = [[UICollectionView alloc] initWithFrame:[self frame] collectionViewLayout:flowLayout];
        [_collectionView setDataSource:self];
        [_collectionView setDelegate:self];
        [_collectionView setBounces:NO];
        [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"HorizontalPickerCell"];
        [self addSubview:_collectionView];
    }
    return self;
}

我尝试以编程方式将UserInteractionEnabled 设置为YES,但这没有任何区别(也不应该有任何区别,因为UserInteractionEnabled 默认设置为YES)。 FWIW,集合视图使用标准 UICollectionViewCells 并将 UILabels 添加到其 contentViews 作为子视图。

关于为什么这不是滚动的任何想法?非常感谢任何和所有帮助。

【问题讨论】:

  • 我把你的代码放到了一个新项目中,它确实滚动了。你确定你有足够的数据让它需要滚动吗?
  • @rdelmar 是的,绰绰有余。 itemData 中有 21 个 NSNumber(从 0 到 100,增加 5s)。不过,我很高兴它对你有用,这意味着我的问题可能在其他地方。
  • 设置反弹 NO ?你疯了吗 ? /笑话

标签: ios uicollectionview


【解决方案1】:

好的,事实证明这对我来说既愚蠢又容易解决。我将集合视图的框架设置为其父视图的frame,而不是其bounds。这会导致各种自动布局问题,并导致触摸事件根本无法注册。现在都修好了。

【讨论】:

    猜你喜欢
    • 2013-07-25
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多