NSCollectionView标头显示

用户名

我有一个NSCollectionView包含3个部分的部分,其中包含调色板中的颜色。我希望每个部分都有一个标题视图,其中包含该部分的名称。乍一看,它似乎起作用。在启动时,它看起来像这样:

一个窗口,显示按类型分组的各种颜色,例如亮色和柔和色

但是,一旦我调整窗口大小,标题文本最终就会在标题外部(以及其中的内部,以某种方式!)绘制:

再次使用错误绘制标题文本的调色板。

为了在集合视图中具有标题,我有一个名为的标题视图类CollectionHeaderView我将此课程注册为补充视图:

    [_collection registerClass:[CollectionHeaderView class]
    forSupplementaryViewOfKind:@"UICollectionElementKindSectionHeader"
                withIdentifier:kSupplementalView];

在集合视图的委托中,我实现了用于为补充元素返回视图的方法:

- (NSView *)collectionView:(NSCollectionView *)collectionView
viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind
               atIndexPath:(NSIndexPath *)indexPath {
    NSView* result = [collectionView makeSupplementaryViewOfKind:kind
                                                  withIdentifier:kSupplementalView
                                                    forIndexPath:indexPath];

    if ([kind isEqualToString:@"UICollectionElementKindSectionHeader"]) {
        NSTextField* textView = ((CollectionHeaderView*)result).textField;
        switch (indexPath.section) {
            case 0:
                [textView setStringValue:@"Bright Colors"];
                break;

            case 1:
                [textView setStringValue:@"Pastel Colors"];
                break;

            case 2:
                [textView setStringValue:@"Designer Colors"];
                break;
        }

        return textView;
    }

    return nil;
}

此外,如果我调整窗口大小,则标题视图不会移动。集合元素似乎在标头周围流动,从而在错误的部分下列出了所有内容。而且,如您在上面的第二张图片中所看到的,加宽窗口最终导致在标题的右边缘和集合视图的右边缘之间留出间隙。

CollectionHeaderView班是非常简单的。它只是创建一个文本字段并绘制背景和文本字段:

@implementation CollectionHeaderView

- (instancetype)initWithFrame:(NSRect)frameRect {
    self = [super initWithFrame:frameRect];

    if (self != nil) {
        NSRect textFrame = frameRect;
        _textField = [[NSTextField alloc] initWithFrame:textFrame];
        _textField.editable = NO;
        _textField.bordered = NO;
        _textField.font = [NSFont fontWithName:@"Helvetica-Bold" size:14.0];
        _textField.backgroundColor = [NSColor colorWithSRGBRed:0.0 green:0.0 blue:0.0 alpha:0.0];
        [self addSubview:_textField];

        self.identifier = kSupplementalView;
    }

    return self;
}

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

    // Drawing code here.
    NSBezierPath*   fillPath    = [NSBezierPath bezierPath];
    [fillPath appendBezierPathWithRect:dirtyRect];
    [[NSColor lightGrayColor] setFill];
    [fillPath fill];

    [_textField drawRect:dirtyRect];
}

@end

我是否错误地实现了上述任何一种方法?有什么我需要实现的方法吗?

维莱克

的返回值collectionView:viewForSupplementaryElementOfKind:atIndexPath:是补充视图result

- (NSView *)collectionView:(NSCollectionView *)collectionView
viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind
               atIndexPath:(NSIndexPath *)indexPath {
    NSView* result = [collectionView makeSupplementaryViewOfKind:kind
                                                  withIdentifier:kSupplementalView
                                                    forIndexPath:indexPath];

    if ([kind isEqual:NSCollectionElementKindSectionHeader]) {
        NSTextField* textView = ((CollectionHeaderView*)result).textField;
        switch (indexPath.section) {
            case 0:
                [textView setStringValue:@"Bright Colors"];
                break;

            case 1:
                [textView setStringValue:@"Pastel Colors"];
                break;

            case 2:
                [textView setStringValue:@"Designer Colors"];
                break;
        }

        return result;
    }

    return nil;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JTable标头不显示

来自分类Dev

QTableWidget标头不显示

来自分类Dev

JTable标头不显示

来自分类Dev

标头图片未显示

来自分类Dev

标头未显示宏

来自分类Dev

粘性标头并不总是显示

来自分类Dev

PHP标头JSON显示奇怪的事情

来自分类Dev

JScrollPane-如何显示JTable标头?

来自分类Dev

标头拒绝显示在移动视图中

来自分类Dev

HTTPS标头显示明文密码

来自分类Dev

Firefox无法正确显示CSS标头

来自分类Dev

wxWidgets ListView标头未显示

来自分类Dev

标头无法在Firefox中正确显示

来自分类Dev

JTable标头未显示在JScrollPane中

来自分类Dev

iOS CollectionView标头不显示

来自分类Dev

显示http标头servlet不显示任何内容

来自分类Dev

如何在Markdown中为蜂房显示可选标头?

来自分类Dev

Symfony 2.3 getRequest()->标头未显示授权承载令牌

来自分类Dev

如果向上滚动,则不会再显示UITableview标头

来自分类Dev

标头h1始终显示蓝色

来自分类Dev

React Navigation 5-标头未显示

来自分类Dev

有用的IMAP标头信息未显示

来自分类Dev

下载标头显示我的服务器上的错误

来自分类Dev

ng-table标头未在IE 9中显示

来自分类Dev

Node js / Angular js-注意:显示了临时标头

来自分类Dev

PHP邮件在正文中显示内容类型标头

来自分类Dev

显示消息后使用标头方法重定向

来自分类Dev

HTML标头没有彼此相邻显示吗?

来自分类Dev

使mutt仅显示标头的一个实例