gpt4 book ai didi

swift - NSTextField标签: dynamically change content and grow width to fit

转载 作者:行者123 更新时间:2023-11-30 13:48:52 24 4
gpt4 key购买 nike

如果我将一个Label(属于NSTextField类)拖到Interface Builder中的 View 中,然后尝试像这样动态设置其stringValue所以:

self.testingLabel.stringValue = "Labels are really really really long"

然后大部分标签将被切断。

cut off text

如何使标签增长以适应其内容而不换行/滚动?

我尝试过使用这个自定义类,但它不起作用。

class AutogrowTextField: NSTextField {
override var intrinsicContentSize: NSSize {
get {
var frame = self.frame;
frame.size.width = CGFloat.max;

// Calculate new height within the frame
// with practically infinite height.
let width = self.cell!.cellSizeForBounds(frame).width

Swift.print(width)
NSBeep()

Swift.print(self.frame.width)

return NSMakeSize(width, frame.size.height)
}
}

// you need to invalidate the layout on text change, else it wouldn't grow by changing the text
override func textDidChange(notification: NSNotification) {
super.textDidChange(notification)
self.invalidateIntrinsicContentSize()
}
}

本质上我只想要像这样的 HTML 文档的默认行为:

<p id="dynamic">Hi</p>

<script>
document.getElementByID("dynamic").innerHtml = "Something really really really long"
</script>

这对我来说是极其痛苦的,因为虽然我是 Mac OS X 和 Cocoa 的新手,但我不是一个“初学者”程序员。

如果有帮助的话,这里是属性检查器的内容。 (应该都是默认值)

attributes

是的,自动布局已启用

enabled

最佳答案

您确定您的 NIB 或 Storyboard已配置为使用自动布局吗?这将是文件检查器上的一个复选框。

我问的原因是属性检查器将有一个“首选宽度_第一个运行时布局宽度”复选框,位于“使用单行模式”复选框的正下方。事实并非如此,这让我认为自动布局未启用。

如果您不使用自动布局,则您负责设置标签的框架大小,或者更简单地,通过调用 sizeToFit() 告诉其调整自身大小以适合其内容。

如果您使用自动布局,则标准 NSTextField 已根据其字符串内容计算其 intrinsicContentSize。几乎可以肯定,问题出在您对 View 设置的任何其他约束上。您需要确保自动布局系统可以自由调整标签的宽度。因此,您不得设置显式宽度约束。或者,如果您同时具有前导和尾随间距约束,则需要确保标签的抗压缩优先级足够高,以将其他相关 View 推出或压缩它们。等等

关于swift - NSTextField标签: dynamically change content and grow width to fit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34573357/

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