2016-10-12 6 views
1

Моя проблема: Я строю приложение MacOS в Swift 3 и я ищу для автоматического изменения размера (изменить размер шрифта) текст в NSTextFieldCell, таким образом, что текст всегда видна в контейнере.Autosizing текст в NSTextFieldCell (Swift 3) для MacOS App

Я столкнулся с Get NSTextField contents to scale, но не уверен, как применить это к Swift 3 в моем приложении. Кто-нибудь имеет какие-либо советы или объяснение (или даже ссылку) о том, как достичь моей цели?

ответ

2

Я сделал функцию, которая возвращает объект NSFont:

func calculateFont(toFit textField: NSTextField, withString string: NSString, minSize min: Int, maxSize max: Int) -> NSFont { 
    for i in min...max { 
     var attr: [String: Any] = [:] as Dictionary 
     attr[NSFontSizeAttribute] = NSFont(name: textField.font!.fontName, size: CGFloat(i))! 
     let strSize = string.size(withAttributes: [NSFontAttributeName: NSFont.systemFont(ofSize: CGFloat(i))]) 
     let linesNumber = Int(textField.bounds.height/strSize.height) 
     if strSize.width/CGFloat(linesNumber) > textField.bounds.width { 
      return (i == min ? NSFont(name: "\(textField.font!.fontName)", size: CGFloat(min)) : NSFont(name: "\(textField.font!.fontName)", size: CGFloat(i-1)))! 
     } 
    } 
    return NSFont(name: "\(textField.font!.fontName)", size: CGFloat(max))! 
} 

Вы можете использовать его так:

// set multines 
    self.textField.lineBreakMode = .byWordWrapping // this looks like it doesn't work, set it in the storyboard instead 
    self.textField.maximumNumberOfLines = 100 
    // set font 
    self.textField.font = self.calculateFont(toFit: self.textField, withString: self.textField.stringValue as NSString, minSize: 8, maxSize: 50) 

Скажите мне, если это работает для вас

+0

Это работало красиво ! Огромное спасибо. Я скорректировал 'CGFloat (i-1)' на 'CGFloat (i-5)', чтобы дать мне немного больше буфера шрифтов, но он работает как шарм. –

+0

Рад, что я могу помочь, и что я ни разу не боролся за 45 минут: p –

+0

Откуда вы знаете, когда окно меняет размер? Я хочу настроить размер шрифта при изменении размера окна пользователем. –

 Смежные вопросы

  • Нет связанных вопросов^_^