我正在尝试在单行标签上使用“Truncate Middle”。我检查了“使用单行模式”,将布局设置为“截断”,换行设置为“截断中间”,并将文本字段的首选宽度设置为“第一运行时布局宽度”,将内容拥抱优先级设置为250。 / p>
这是我的< Title>的布局我试图启用截断的标签:
在我的ViewController中:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
titleLabel.stringValue = "This is a very very long title that should be truncated because it would enlarge the window unnecessary!"
}
它不起作用,窗口被放大以显示完整的标题,用户无法减小其宽度。
奇怪的是,如果我将布局和换行符从“Truncates”/“Truncate Middle”更改为“Wraps”/“Character Wrap”,它可以正常工作,但没有中间截断。
我希望truncate能像这样工作:
这是一个非常长的文本......不需要窗口!
也许我错过了什么?
编辑:以下是测试问题的示例项目:https://nofile.io/f/9s9OJXHaaw1/TestTruncate.zip
答案 0 :(得分:2)
这很简单。只需在override func viewDidLoad()
yourLabel.lineBreakMode = .byTruncatingMiddle
或者您也可以从Interface Builder中进行设置。选择您的标签并将Line Break
设置为Truncate Middle
。
答案 1 :(得分:1)
对于truncate middle,您还必须将对齐设置为居中。
答案 2 :(得分:1)
如果您对NSTextView
和周围NSView
使用自动布局,则应设置NSTextView
小于NSLayoutPriorityWindowSizeStayPut
的内容压缩阻力优先级 (例如499)。否则,NSTextView
不会截断其内容。 (Reference)
我可以通过将Content Compression Resistance Priority
Horizontal
从500
设置为499
来实现此目的。
您可以选择标签来执行此操作 - >尺寸检验员 - >内容压缩阻力优先
给我以下输出: