3

我需要底部对齐 NSTextField 中的文本,以便在动态更改字体大小时,文本的底部像素行始终保持在同一位置(我使用它来执行此操作)。

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

我还没有找到任何可以让我在底部对齐文本的东西,但我确实找到了它并为我的自定义 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 但没有任何改变。我没有正确调整它还是我做错了什么?

4

1 回答 1

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 位置。

于 2019-02-19T04:41:10.593 回答