У меня есть ячейки представления коллекции с равной шириной и высотой в макете потока.Они содержат один UILabel, свойство numberOfLines
которого установлено на 0
.Ограничения метки:
Ячейка сделана круглой:
cell.layer.cornerRadius = cell.frame.width / 2
cell.clipsToBounds = true
Я увеличиваю размер каждой ячейкина основе размера текста метки.Однако его ширина и высота не могут превышать 150
.Вот как я определяю размер каждой ячейки:
private func estimatedFrameForText(text: String) -> CGRect {
let size = CGSize(width: 100, height: 1000)
let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
return NSString(string: text).boundingRect(with: size, options: options, attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 17)], context: nil)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let hashLabelText = textArray[indexPath.item]
let textSize = estimatedFrameForText(text: hashLabelText)
let width = min(150, textSize.width + 20)
let height = width
return CGSize(width: width, height: height)
}
С этим я получаю следующий результат (я показываю ту часть, где ширина и высота ячеек равны 150
):
Как вы можете видеть, когда ячейка достигает максимально возможного размера и текст меток продолжает увеличиваться, в какой-то момент текстсбивается с видимой части клеток.Я понимаю, почему это происходит (отладчик разметки показывает это ясно), однако пока не могу найти решение проблемы.
Я хочу, чтобы края метки оставались видимыми, независимо от того, чторазмер ячейки.Хвост текста может быть обрезан, если ячейка достигает максимального размера, но текст продолжает увеличиваться.
Я пытался увеличить расстояние между меткой и границами ячеек, но это влияет на то, как текствыглядит в самых маленьких клетках.Я также пытался изменить минимальный масштаб шрифта на этикетке, но снова безуспешно.