我一直在阅读有关如何在NSTextField上设置垂直对齐的各种选项。我希望文本显示在中心,并在Swift中以编程方式进行。以下是我到目前为止看到的内容:
我在Swift中尝试过的一件事是设置以下属性:
textField.usesSingleLineMode = true
有关垂直居中文字的最佳方式的任何提示都将非常感谢!
答案 0 :(得分:6)
这很难做到,因为Apple非常难以做到这一点。我通过子类化NSTextFieldCell并使用ovRriding drawingRectForBounds:方法实现了它,如下所示:
override func drawingRectForBounds(theRect: NSRect) -> NSRect {
let newRect = NSRect(x: 0, y: (theRect.size.height - 22) / 2, width: theRect.size.width, height: 22)
return super.drawingRectForBounds(newRect)
}
这只是我的方式,我确定有更好的方法,我还不知道(还)。这仅适用于TextFields中的标准字体大小(文本高度为22)。这就是我硬编码的原因。 Haven还没弄明白,如果改变字体,如何在单元格中获得高度。
结果:
答案 1 :(得分:3)
在操场上试试这个,它将文本完美居中,在项目中使用它!希望它有所帮助!
import Cocoa
let cell = NSTableCellView()
cell.frame = NSRect(x: 0, y: 0, width: 100, height: 100)
let tf = NSTextField()
tf.frame = cell.frame
tf.stringValue = "MyTextfield"
tf.alignment = .Center
let stringHeight: CGFloat = tf.attributedStringValue.size().height
let frame = tf.frame
var titleRect: NSRect = tf.cell!.titleRectForBounds(frame)
titleRect.size.height = stringHeight + ( stringHeight - (tf.font!.ascender + tf.font!.descender ) )
titleRect.origin.y = frame.size.height / 2 - tf.lastBaselineOffsetFromBottom - tf.font!.xHeight / 2
tf.frame = titleRect
cell.addSubview(tf)
答案 2 :(得分:1)
接受的答案非常有效,这是Swift3的版本。
class VerticallyAlignedTextFieldCell: NSTextFieldCell {
override func drawingRect(forBounds rect: NSRect) -> NSRect {
let newRect = NSRect(x: 0, y: (rect.size.height - 22) / 2, width: rect.size.width, height: 22)
return super.drawingRect(forBounds: newRect)
}
}
答案 3 :(得分:1)
我已经在NSView中添加了NSTextField并使其居中。
另一个解决方案是(在iOS项目中)创建UILabel并允许它调整其大小(sizeToFit())并再次将其嵌入到UIView中。
我个人不喜欢以前答案中的计算,iOS的第二个解决方案适用于所有文本大小和行号。
答案 4 :(得分:1)
我还面临着与NSTextField的垂直对齐问题。我的要求涉及在NSTextField中呈现单行字符串。另外, textfield需要调整大小意味着我们已经以编程方式调整了resize上text-field中文本的font-point-size。在这种情况下,我们面临垂直对齐问题 - 错误对齐很难直接掌握/理解。
最终有效:
所以,在我的场景中一个简单的,
关闭"单线模式"在界面构建器中
因为文本字段解决了这个问题。