gpt4 book ai didi

macos - NSTextField 可调整大小以适合内容

转载 作者:搜寻专家 更新时间:2023-10-31 22:34:37 27 4
gpt4 key购买 nike

我的 NSTextField 定义了左、右和顶部约束(未设置底部约束)。如果内容放不下,我需要 NSTextField 增长,如果还有未使用的空间,我需要减小它的大小。

现在我有了:如果 NSTextField 有多行文本或内容太多,它会自动以奇怪的行为扩展,而且 NSTextField 不会在调整窗口大小时减小自己的大小。

我还没有找到任何用 Swift 编写的简单解决方案来解决这个问题(我有很多这样的带有约束的标签),在 iOS 上,一切都使用通常的文本标签和约束。

Illustration

我已经为这个问题创建了一个简单的项目,您可以看到问题所在:[Download Text.zip]

我找到但未使用的解决方案:

  1. 您可以尝试计算可能的 TextField 高度并为其设置高度限制。该解决方案的问题:

    • 可能的高度计算不准确,有时您计算的高度不正确。
    • 解决方案是用 Objective-C 编写的,带有一些复杂的代码。
  2. 在每个窗口调整大小或文本更改操作上运行 .sizeToFit()。它不起作用,因为 .sizeToFit() 总是将所有文本压缩到一行。

  3. 使用 NSTextView 而不是 NSTextField。这是个好方法,但是:

    • 我不需要 NSTextView 的滚动、编辑和其他功能。我不想为简单标签调用复杂组件。
    • NSTextView 总是需要高度或底部约束,我不知道底部约束,因为内容可以随着新文本向下扩展。
    • 我还没有找到让 NSTextView 的行为像我想要的那样的完整解决方案:)

最佳答案

根据 Mac OS X Release Notes (NSTextField intrinsicContentSize 改进部分)当 NSTextField 的高度改变时,这是一个已知的错误,但宽度保持不变。我们有两种修复方法:

  1. 我们可以将 maximumNumberOfLines 指定为一个有意义的值。这对我们来说不是好方法,因为我们不知道实际的行数,也不想计算它。
  2. 我们可以将 preferredMaxLayoutWidth 设置为实际值。我以这样的代码结束:

代码:

override func viewDidLayout() {
super.viewDidLayout()
textField.preferredMaxLayoutWidth = textField.frame.width
}

关于macos - NSTextField 可调整大小以适合内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32846953/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com