我正在创建cocoa应用程序,其中我以编程方式创建了NSTextField
,如下所示。
NSView *superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 300, 1400, 500)];
NSTextField *myTextField = [[NSTextField alloc] initWithFrame:NSMakeRect(180, 100, 1000, 300)];
[myTextField setStringValue:myText];
[myTextField setEditable:NO];
[myTextField setBezeled:NO];
[myTextField setDrawsBackground:NO];
[myTextField setSelectable:NO];
[myTextField setFont:[NSFont fontWithName:@"Futura" size:22]];
[superView addSubview:myTextField];
[superView setAutoresizesSubviews:YES];
[myTextField setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[self.window.contentView addSubview:superView];
现在我想要我的文本垂直对齐,它应该是可调整的根据文本长度。
有人有什么建议吗?请分享您的建议:)
非常感谢..!
发布于 2012-04-18 16:11:34
您想要的是可能的,但是您必须创建NSTextFieldCell的一个子类,然后在NSTextField中使用这个子类。要覆盖的关键方法是drawingRectForBounds:
、selectWithFrame:
和editWithFrame:
关于这一点,他甚至提供了一个可下载的版本Here is a blog post from the fantastic Daniel Jalkut。这个帖子已经相当老了,但它应该仍然可以正常工作。
发布于 2012-04-18 16:04:59
要将文本字段调整为字符串大小,您必须先使用NSString
的sizeWithFont: constrainedToSize: lineBreakMode:
计算文本大小,然后通过设置框架来调整文本字段的大小。
对于垂直对齐,请查看此question (以及答案)。
发布于 2021-08-27 11:46:16
以下是通过上面的sosborn链接的该解决方案的Swift版本:
open class VerticallyCenteredTextFieldCell: NSTextFieldCell {
fileprivate var isEditingOrSelecting : Bool = false
open override func drawingRect(forBounds rect: NSRect) -> NSRect {
let rect = super.drawingRect(forBounds: rect)
if !isEditingOrSelecting {
let size = cellSize(forBounds: rect)
return NSRect(x: rect.minX, y: rect.minY + (rect.height - size.height) / 2, width: rect.width, height: size.height)
}
return rect
}
open override func select(withFrame rect: NSRect, in controlView: NSView, editor textObj: NSText, delegate: Any?, start selStart: Int, length selLength: Int) {
let aRect = self.drawingRect(forBounds: rect)
isEditingOrSelecting = true
super.select(withFrame: aRect, in: controlView, editor: textObj, delegate: delegate, start: selStart, length: selLength)
isEditingOrSelecting = false
}
open override func edit(withFrame rect: NSRect, in controlView: NSView, editor textObj: NSText, delegate: Any?, event: NSEvent?) {
let aRect = self.drawingRect(forBounds: rect)
isEditingOrSelecting = true
super.edit(withFrame: aRect, in: controlView, editor: textObj, delegate: delegate, event: event)
isEditingOrSelecting = false
}
}
https://stackoverflow.com/questions/10205088
复制相似问题