У меня есть UILabel
внутри UITableViewCell
, который я хочу динамически регулировать его шрифт и размер в зависимости от содержимого, чтобы всегда поддерживать самый большой шрифт, который он может поддерживать без усечения. Я в большинстве случаев использую adjustsFontSizeToFitWidth
, но у метки есть дополнительное вертикальное пространство, в котором она не нуждается.
На этом скриншоте, запущенном на симуляторе iPhone SE, метка правильно уменьшила шрифт от 55, чтобы соответствовать, но есть это дополнительное место в верхней части этикетки. Я хочу, чтобы это место было go далеко!
Вот мой код этикетки:
private lazy var label: UILabel = {
let label = UILabel()
label.font = .systemFont(ofSize: 55, weight: .ultraLight)
label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.25
label.backgroundColor = .purple
return label
}()
Вот мой код макета:
self.addSubview(self.labelsContainerView)
self.labelsContainerView.snp.makeConstraints { (make) in
make.leading.equalTo(leftView.snp.trailing).offset(20)
make.trailing.equalTo(rightView.snp.leading).offset(-20)
make.top.bottom.equalToSuperview()
}
self.labelsContainerView.addSubview(self.middleLabel)
self.middleLabel.snp.makeConstraints { (make) in
make.leading.trailing.centerY.equalToSuperview()
}
self.labelsContainerView.addSubview(self.topLabel)
self.topLabel.snp.makeConstraints { (make) in
make.leading.equalToSuperview()
make.bottom.equalTo(self.middleLabel.snp.top)
make.top.equalToSuperview().offset(8)
}
self.labelsContainerView.addSubview(self.bottomLabel)
self.bottomLabel.snp.makeConstraints { (make) in
make.leading.equalToSuperview()
make.top.equalTo(self.middleLabel.snp.bottom)
make.bottom.equalToSuperview().offset(-8)
}
Короче, у меня есть UIView
, прикрепленный к верхней и нижней части моего UITableViewCell
. В этом представлении у меня есть 3 метки: верхняя, средняя и нижняя. Метки прикреплены сверху вниз.
Я хочу, чтобы middleLabel
всегда был наибольший размер, который может быть, чтобы удовлетворить макет и использовать самый большой шрифт, который будет соответствовать внутри этого размера без усечения. Похоже, что размер содержимого intrinsi c не обновляется при изменении шрифта метки. Я пробовал все виды звонков на setNeedsLayout()
и layoutIfNeeded()
, но они никогда не помогали.