首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决NSCollectionViewItem重叠问题?

如何解决NSCollectionViewItem重叠问题?
EN

Stack Overflow用户
提问于 2021-02-22 21:32:48
回答 1查看 59关注 0票数 0

我使用NSCollectionView来显示一个水平列表。但所有单元格在第一个单元格位置重叠,如下所示。

我没有足够的名气来发布图片。cell1、cell2、cell3,它们都在第一个单元格位置重叠。所以它看起来像一个细胞,但实际上它有3个细胞。

我的主要代码:

代码语言:javascript
复制
ViewController.h

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.flowLayout.scrollDirection = NSCollectionViewScrollDirectionHorizontal;
    self.collectionView.dataSource = self;
    self.collectionView.delegate = self;
    self.collectionView.selectable = YES;
    self.collectionView.allowsMultipleSelection = YES;
    [self.collectionView registerNib:[[NSNib alloc] initWithNibNamed:@"ScreenShotCellView" bundle:nil] forItemWithIdentifier:NSStringFromClass([ScreenShotCellView class])];
}

#pragma mark - NSCollectionViewDataSource
- (NSInteger)numberOfSectionsInCollectionView:(NSCollectionView *)collectionView {
    [self.collectionView.collectionViewLayout invalidateLayout];
    return 1;
}

- (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return self.screenshotItems.count;
}

- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath {
    NSCollectionViewItem *itemCell = [self.collectionView makeItemWithIdentifier:NSStringFromClass([ScreenShotCellView class]) forIndexPath:indexPath];
    if ([itemCell isKindOfClass:[ScreenShotCellView class]]) {
        ScreenShotCellView *cellView = (ScreenShotCellView *)itemCell;
        ScreenshotItem *itemData = [self.screenshotItems objectAtIndex:indexPath.item];
        cellView.item = itemData;
    }
    return itemCell;
}

#pragma mark - NSCollectionViewDelegateFlowLayout
- (NSSize)collectionView:(NSCollectionView *)collectionView layout:(NSCollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(100, self.collectionView.frame.size.height - 20);
}

- (CGFloat)collectionView:(NSCollectionView *)collectionView layout:(NSCollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
    return 10;
}

- (CGFloat)collectionView:(NSCollectionView *)collectionView layout:(NSCollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
    return 10;
}

我该怎么做才能修复它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-23 16:48:48

我已经找到原因了。问题出在我的自定义单元格中。

代码语言:javascript
复制
@interface ScreenShotCellView ()

@property (weak) IBOutlet NSView *containerView;

@end

@implementation ScreenShotCellView

- (void)loadView {
    self.view = self.containerView;
}

@end

loadView方法中。self.view = self.containerView; make始终显示在第一个单元格中。

经过这样的改变,它就变得正常了。

代码语言:javascript
复制
- (void)loadView {
    self.view = [[NSView alloc] init];
    [self.view addSubview:self.containerView];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66316701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档