【问题标题】:Align the text in a NSTextField to the top?将 NSTextField 中的文本对齐到顶部?
【发布时间】:2015-08-18 22:10:26
【问题描述】:

在这里,您可以看到使用 Xcode 中的视图调试器检查的 NSTextField。我想让文本在它的边界框内顶部对齐,而不是底部对齐,所以我可以将文本的底部与我的一些其他内容(图像等)对齐

怎样才能得到这样的布局?

【问题讨论】:

  • 如果这不是基线所基于的,为什么还要关心文本字段的底部在哪里?换句话说,为什么文本字段高于其固有高度对您的情况很重要?也许有一种不同的方法可以避免这个问题。
  • 因为当 topAnchor 和文本的实际顶部之间存在任意数量的空白时,使用 topAnchor 的对齐不是很有用。
  • 我不明白。文本字段通常刚好足够高以适应字体(上升加下降,再加上一点边框)。为什么你的文本字段比字体高这么多?我想这一定是你做的。如果那不是你想要的,你为什么要这么做?允许文本字段具有其固有高度并与顶部对齐将位于(潜在)文本的顶部,尽管您必须考虑额外的高字符(如 Å)。即使文本字段有点太高,也只需使用上升器的偏移常数与基线对齐。
  • 不,不幸的是,这是标准的 NSTextField 行为。
  • @ClausJørgensen 你试过我的建议了吗?

标签: objective-c swift cocoa


【解决方案1】:

您需要继承NSTextFieldCell 并覆盖以下方法:

- (NSRect)drawingRectForBounds:(NSRect)theRect

您可以使用newRect = [super drawingRectForBounds:theRect]; 之类的东西,然后尝试操纵newRect 的值来实现您想要的。

如果需要,您还可以覆盖这些方法:

- (void)editWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject event:(NSEvent *)theEvent

- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject start:(NSInteger)selStart length:(NSInteger)selLength

【讨论】:

  • @downvoter 我试过这种方法,效果很好。但是,您对 Cocoa 的了解不足或编程技能不佳可能会导致您发现它没有用处。所以你想要的都投反对票。
【解决方案2】:

您可以尝试 sizeToFit 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-06
    • 2015-12-29
    • 1970-01-01
    • 2010-12-17
    • 2014-09-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多