我需要在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,但没有任何变化。是我没有正确调整,还是我做错了什么?
您需要调整 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 位置。