【问题标题】:How to let the width of an NSTextField be adjusted to its content?如何让 NSTextField 的宽度根据其内容进行调整?
【发布时间】:2013-10-03 18:20:16
【问题描述】:

我与Xcode5 合作。

我希望NSTextField 的宽度适应其内容。

如果可能,我想在InterfaceBuilder 中执行此操作,如果可能,不进行子类化。

编辑: 我正在与autolayout 合作! (这似乎阻止我改变我的 NSTextField 的宽度)

【问题讨论】:

  • 为什么需要这个?我也许可以提供一个可以帮助您的替代解决方案,或者至少可以帮助您指出正确的方向。
  • 我有一个通用标签:“Hello ”。在这个标签之后,我还有另一个NSTextView。我希望第二个在第一个之后。
  • 我不是自动布局专家,但它使用权重,所以你不能为内容匹配分配比右边缘更大的权重吗?

标签: xcode cocoa interface-builder nstextfield


【解决方案1】:

试试这样:- 将委托连接到您的文本字段

-(void)controlTextDidChange:(NSNotification *)obj
{
    NSString *str=[yourTextField stringValue];
    NSCell *cell=[[NSCell alloc]initTextCell:str];
    CGFloat sz=[cell cellSize].width;
    [yourTextField setFrameSize:NSMakeSize(sz+10.0, 22.0)];
}

【讨论】:

  • 如果autolayout 不活动,它可以工作。但它不适用于autolayout ON... 我需要autolayout
  • Autolayout 有一个称为“内在值”的约束,这意味着将标签设置为其内容的大小。这仅适用于 UILabel,因此您无法输入...
【解决方案2】:

NSTextField 的文档中,没有任何内容表明NSTextField 可以根据其内容调整大小,因此我认为这是不可能的。不过,对于踢腿和咯咯笑声,我检查了情节提要,除了自动调整大小蒙版之外,没有任何属性可以调整 NSTextField 的大小,这与 NSTextField 文本属性无关。

【讨论】:

  • 为什么这是公认的答案?这显然不是不可能的,您可以选择多种方法来解决这个问题。 boundingRect(with size: NSSize, options: NSStringDrawingOptions = [], attributes: [String : Any]? = nil) -> NSRect NSString 是您可以开始使用的一种方法。
  • 在制作上述答案时,我假设他们想要一种没有开销的方法,例如调整到固有大小。自动布局只不过是一堆数学计算,如果你愿意,你可以随时自己做,并且通过这种逻辑,一切都可以重新调整大小。
【解决方案3】:

尝试为NSTextfield设置preferredMaxLayoutWidth,这个值会用来更新你的高度,希望对你有帮助。 及参考资源:UILabel sizeToFit doesn't work with autolayout ios6

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2014-09-29
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多