как исправить неверное перенос слов? - PullRequest
0 голосов
/ 27 января 2019

очень долго не могу решить простую задачу, а именно: перенести слово на новую строку и автоматически уменьшить метку, если слово не подходит.Подскажите, как быть в такой ситуации.

@IBOutlet weak var wordLabel: UILabel!
@IBOutlet weak var transcriptionLabel: UILabel!
@IBOutlet weak var translationLabel: UILabel!


var index = 0
var word = ""
var transcription = ""
var translation = ""

override func viewDidLoad() {
    super.viewDidLoad()

    wordLabel.text = word
    transcriptionLabel.text = ""
    translationLabel.text = ""

    wordLabel.adjustsFontSizeToFitWidth = true
    wordLabel.minimumScaleFactor = 0.1

    transcriptionLabel.adjustsFontSizeToFitWidth = true
    transcriptionLabel.minimumScaleFactor = 0.1

    translationLabel.adjustsFontSizeToFitWidth = true
    translationLabel.minimumScaleFactor = 0.1

    self.transcriptionLabel.alpha = 0.0
    self.translationLabel.alpha = 0.0
}

runApp storyboard storyboard

1 Ответ

0 голосов
/ 27 января 2019

Спасибо humblePilgrim , за предложенный ответ, это действительно помогло.Я оставляю ссылку на источник и прикрепляю сам ответ.

источник

Swift 4.2

extension UILabel {
// Adjusts the font size to avoid long word to be wrapped
func fitToAvoidWordWrapping() {
    guard adjustsFontSizeToFitWidth else {
        return // Adjust font only if width fit is needed
    }
    guard let words = text?.components(separatedBy: " ") else {
        return // Get array of words separate by spaces
    }

    // I will need to find the largest word and its width in points
    var largestWord: NSString = ""
    var largestWordWidth: CGFloat = 0

    // Iterate over the words to find the largest one
    for word in words {
        // Get the width of the word given the actual font of the label
        let wordWidth = word.size(withAttributes: [.font: font]).width

        // check if this word is the largest one
        if wordWidth > largestWordWidth {
            largestWordWidth = wordWidth
            largestWord = word as NSString
        }
    }

    // Now that I have the largest word, reduce the label's font size until it fits
    while largestWordWidth > bounds.width && font.pointSize > 1 {
        // Reduce font and update largest word's width
        font = font.withSize(font.pointSize - 1)
        largestWordWidth = largestWord.size(withAttributes: [.font: font]).width
    }
}
} 

Iблагодарю пользователя Дамба за ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...