macos - 如何解决 NSCollectionViewItem 重叠问题?
问题描述
我使用 NSCollectionView 来显示水平列表。但是所有单元格都在第一个单元格位置重叠,就像这样。
我没有足够的声誉来发布图片。[cell1,cell2,cell3],它们都在第一个单元格位置重叠。所以它看起来只是一个单元格,但实际上它有 3 个单元格。
我的主要代码:
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;
}
我该怎么做才能解决它?
解决方案
我找到了原因。问题出在我的自定义单元格中。
@interface ScreenShotCellView ()
@property (weak) IBOutlet NSView *containerView;
@end
@implementation ScreenShotCellView
- (void)loadView {
self.view = self.containerView;
}
@end
在loadView
方法中。self.view = self.containerView;
始终显示在第一个单元格中。
改成这样后就正常了。
- (void)loadView {
self.view = [[NSView alloc] init];
[self.view addSubview:self.containerView];
}
推荐阅读
- c# - asp.net core post api总是收到null
- selenium - 如何处理 selenium webdriver 中的 span 类下拉菜单
- rest - 有人再使用 From HTTP 请求标头了吗?
- java - JPA Annotation @Column(insertable=false) 被忽略,为什么?
- ios - Swift IOS 问题从 MasterView 更新 DetailView 中的标签
- php - 使用正则表达式删除 CSV 中的额外制表符分隔符
- ubuntu - 坚持在 squid 代理设置中下一步该做什么
- c# - 什么用于即时消息功能?
- opencv - 为什么OpenCV在调整大小时会切换形状?
- javascript - 如何将多个选择ID传递给ajax函数