【问题标题】:Autosizing text in NSTextFieldCell (Swift 3) for MacOS App为 MacOS 应用程序自动调整 NSTextFieldCell (Swift 3) 中的文本
【发布时间】:2016-10-12 21:07:51
【问题描述】:

我的问题:我正在 Swift 3 中构建一个 MacOS 应用程序,并希望自动调整 NSTextFieldCell 中的文本大小(更改字体大小),以便文本始终可见它的容器。

我遇到过Get NSTextField contents to scale,但不确定如何在我的应用程序中将其应用于 Swift 3。有人对如何实现我的目标有任何建议或解释(甚至链接)吗?

【问题讨论】:

    标签: swift xcode nstextfield nstextfieldcell


    【解决方案1】:

    我创建了一个返回 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)
    

    告诉我这是否适合你

    【讨论】:

    • 效果很好!非常感谢。我将 CGFloat(i-1) 调整为 CGFloat(i-5) 以给自己更多的字体缓冲区,但它就像一个魅力。
    • 很高兴我能帮上忙,而且我没有白白挣扎 45 分钟 :p
    • 你怎么知道窗口什么时候改变它的大小?当用户更改窗口大小时,我想调整字体大小。
    • 我不是真的为 mac os 开发,如果你有问题,你可能想发布一个问题 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多