2

如何绘制这样的行分隔符:

在此处输入图像描述

请注意,彼此顶部有 2 条单像素线。有小费吗?


编辑:

这是我需要的代码,在 NSBox 子类中:(或 NSView,并不重要):

- (void)drawRect:(NSRect)rect
{
    [[NSColor lightGrayColor] set];
    NSRectFill(NSMakeRect(0, 1, NSWidth(rect), 1));
    
    [[NSColor whiteColor] set];
    NSRectFill(NSMakeRect(0, 0, NSWidth(rect), 1));    
}
4

3 回答 3

7

通常,这种分隔符用 绘制NSBox,通常配置为NSBoxSeparator类型。不过,这不是您要寻找的外观。我建议在子类中手绘它NSBox(这样你就可以得到正常的NSBox行为)。有关子类的示例NSBox,请参阅 Matt Gemmell 的RoundedBox

你只需要两行,所以drawRect:应该很简单。以这种方式封装它将使您非常灵活。

(当然,您也可以考虑只使用标准NSBox分隔符而不是创建自定义外观。这就是它的用途。)

于 2013-02-25T16:18:48.840 回答
0

我在 iOS 上用类似的东西模仿了它,假设NSView有一个类似的界面,我希望这会有所帮助:

UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(11, 99, 298, 1)];
lineView.backgroundColor = [UIColor darkGrayColor];
[panel addSubview:lineView];

UIView *lineView2 = [[UIView alloc] initWithFrame:CGRectMake(10, 100, 300, 1)];
lineView2.backgroundColor = [UIColor whiteColor];
[panel addSubview:lineView2];

自己看了一下 NSView 界面,它似乎几乎可以直接转移:

NSView *lineView = [[NSView alloc] initWithFrame:CGRectMake(11, 99, 298, 1)];
lineView.backgroundColor = [NSColor colorWithCalibratedRed:0.4f green:0.4f blue:0.4f alpha:1.0f];
[panel addSubview:lineView];

NSView *lineView2 = [[NSView alloc] initWithFrame:CGRectMake(10, 100, 300, 1)];
lineView2.backgroundColor = [NSColor colorWithCalibratedRed:1.0f green:1.0f blue:1.0f alpha:1.0f];
[panel addSubview:lineView2];
于 2013-02-25T15:48:46.307 回答
0

你也可以使用 CALayer

CALayer *lineLayer = [CALayer layer];
lineLayer.frame = (CGRectMake(0, 100, 300, 1));
[lineLayer setBackgroundColor:CGColorCreateGenericRGB(1.0, 1.0, 1.0, 1.0)];
[panel.layer addSublayer: lineLayer];

或(如果您无权访问图层)

CALayer *lineLayer = [CALayer layer];
lineLayer.frame = (CGRectMake(0, 100, 300, 1));
[lineLayer setBackgroundColor:CGColorCreateGenericRGB(1.0, 1.0, 1.0, 1.0)];
[panel setWantsLayer:YES];
[panel setLayer: lineLayer];
于 2014-05-18T07:30:31.267 回答