我需要在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但没有任何改变。我没有正确调整这个或者我做错了什么?
答案 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位置。