Как я могу настроить размер шрифта UITextView динамически в CollectionViewCell? - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть collectionView, который включает в себя UITextView.Я хочу установить размер шрифта TextView динамически.После моих расследований я нашел ниже коды.Он отлично работает для динамического размера шрифта UITextView.Если текст длинный, коды располагают наиболее подходящий размер шрифта в соответствии с высотой кадра UITextView.

Но моя проблема в том, что когда ViewController все-таки загружался, размер шрифта UITextView в UICollectionViewCell не изменяется правильно.Но когда я пролистываю в другую ячейку, размер шрифта меняется правильно.И затем я снова проведу пальцем к первой ячейке, размер шрифта устанавливает правильный размер шрифта.

Итак, когда ViewController загрузился, размер шрифта UITextView в UICollectionViewCell (называемый QuoteCell) составляет 20pt, но он должен быть 36pt.Но я не могу установить этот размер без пролистывания в другую ячейку и обратно.

Я попытался установить шрифт внутри методов awakeFromNib и willDisplayCell или cellForRowAtIndexPath.Я также пытался использовать setNeedDisplay, но он не работал.

В чем проблема?Что я пропускаю?

// This codes adjust font size according to UITextView size.

extension UITextView {
func updateTextFont() {

    if (self.text.isEmpty || self.bounds.size.equalTo(CGSize.zero)) {
        print("Text Empty")
    }

    let textViewSize = self.frame.size
    let fixedWidth = textViewSize.width
    let expectSize = self.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat(MAXFLOAT)))

    var expectFont = self.font
    if (expectSize.height > textViewSize.height) {

        while (self.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat(MAXFLOAT))).height > textViewSize.height) {
            expectFont = self.font!.withSize(self.font!.pointSize - 1)
            self.font = expectFont
        }
    }
    else {
        while (self.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat(MAXFLOAT))).height < textViewSize.height) {

            expectFont = self.font!.withSize(self.font!.pointSize + 1)
            self.font = expectFont
        }
    }
}
}

И я установил размер текста txtQuote в методе willDisplayCell (я пробовал это делать в методах cellForRowAtIndexPath и awakeFromNib.)

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {

    let quoteCell = cell as! QuoteCell

    quoteCell.layer.masksToBounds = false
    quoteCell.txtQuote.updateTextFont()

}
...