NSTextField底部对齐

时间:2012-07-02 13:40:48

标签: objective-c vertical-alignment nstextfield nstextfieldcell

我需要在NSTextField中底部对齐文本,以便在动态更改字体大小(I use this to do that)时,文本的底部像素行始终保持在同一位置。

现在我有这样的场景:每当字体大小变小时,例如从55到20,文本挂在边界/框架的顶部,这不是我需要的。

我没有找到任何可以让我在底部but I did find this对齐文本的内容,并将其调整为我的自定义NSTextFieldCell子类:

- (NSRect)titleRectForBounds:(NSRect)theRect {
    NSRect titleFrame = [super titleRectForBounds:theRect];
//    NSSize titleSize = [[self attributedStringValue] size];
    titleFrame.origin.y = theRect.origin.y;
    return titleFrame;
}

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    NSRect titleRect = [self titleRectForBounds:cellFrame];
    [[self attributedStringValue] drawInRect:titleRect];
}

我还使用了[myTextField setCell:myTextFieldCell];,以便我的NSTextField使用NSTextFieldCell但没有任何改变。我没有正确调整这个或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要调整titleRect的高度,因为如果字体缩小了,它的高度会比需要的高。所以这样的事情可以调整高度,并根据高度差向下移动titleRect。

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
    NSRect titleRect = [super titleRectForBounds:cellFrame];
    NSSize titleSize = [[self attributedStringValue] size];
    CGFloat heightDiff = titleRect.size.height - titleSize.height;
    titleRect = NSMakeRect(titleRect.origin.x, titleRect.origin.y + heightDiff, titleRect.size.width, titleSize.height);
    [[self attributedStringValue] drawInRect:titleRect];
}

您也可以执行drawAtPoint:而不是drawInRect:来提供准确的位置,但是如果文本没有对齐,则还必须计算正确的x位置。