截断标签

时间:2017-09-19 21:47:59

标签: swift autolayout nstextfield appkit

我正在尝试在单行标签上使用“Truncate Middle”。我检查了“使用单行模式”,将布局设置为“截断”,换行设置为“截断中间”,并将文本字段的首选宽度设置为“第一运行时布局宽度”,将内容拥抱优先级设置为250。 / p>

这是我的< Title>的布局我试图启用截断的标签: layout

在我的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”,它可以正常工作,但没有中间截断。

screenshot with wrap

我希望truncate能像这样工作:

  

这是一个非常长的文本......不需要窗口!

也许我错过了什么?

编辑:以下是测试问题的示例项目:https://nofile.io/f/9s9OJXHaaw1/TestTruncate.zip

3 个答案:

答案 0 :(得分:2)

这很简单。只需在override func viewDidLoad()

中添加此行即可
  yourLabel.lineBreakMode = .byTruncatingMiddle

或者您也可以从Interface Builder中进行设置。选择您的标签并将Line Break设置为Truncate Middle

enter image description here

答案 1 :(得分:1)

对于truncate middle,您还必须将对齐设置为居中。

答案 2 :(得分:1)

如果您对NSTextView和周围NSView使用自动布局,则应设置NSTextView小于NSLayoutPriorityWindowSizeStayPut内容压缩阻力优先级 (例如499)。否则,NSTextView不会截断其内容。 (Reference

我可以通过将Content Compression Resistance Priority Horizontal500设置为499来实现此目的。

您可以选择标签来执行此操作 - >尺寸检验员 - >内容压缩阻力优先

enter image description here

给我以下输出:

enter image description here