Измерение высоты линий в UITextView - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь измерить высоту линий, чтобы разместить наложение на определенный текст в UITextView.Конкретно, что я имею в виду под строками, это текст, разделенный \n.Таким образом, одна строка может фактически занимать несколько строк, и это то, что я пытаюсь измерить.Я пробовал несколько разных подходов, однако я не могу правильно рассчитать высоту.Еще один недостаток моих текущих подходов заключается в том, что все они должны рассчитываться на главном синхронном потоке, что не идеально, потому что у меня много вычислений.

ПРИМЕР ПОДХОДА UI

measurement.font = UIFont(name: "Menlo", size: 16)
measurement.frame = CGRect(x: 0, y: 0, width: 10000, height: 50)

func heightForString(line: String) -> CGFloat {
    var height : CGFloat = 0
    measurement.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 10000)
    measurement.sizeToFit()
    height = measurement.frame.height
    print(height, lineHeight)
    measurement.frame = CGRect(x: 0, y: 0, width: 10000, height: 50)
    return height
}
// Comparing the returned height to measurement.font?.lineHeight and padding shows the results make little sense... :(

ПРИМЕР ПЕЧАТИ

Должно быть 1 строка

30,0 18,625

Должно быть 3 строки

43,6666666666667 18,625

1 Ответ

0 голосов
/ 05 июня 2018
func heightForString(line: String) -> CGFloat {
    let textView = UITextView()
    let maxwidth = UIScreen.main.bounds.width
    textView.frame = CGRect(x:0,y: 0,width: maxwidth,height: CGFloat(MAXFLOAT))
    textView.textContainerInset = UIEdgeInsets.zero
    textView.textContainer.lineFragmentPadding = 0
    textView.font = UIFont(name: "Menlo", size: 16)
    textView.text = line
    textView.isScrollEnabled = false
    textView.sizeToFit()
    return textView.frame.size.height
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...