UILabel не изменяет размер после масштабирования шрифта с помощью MinimScaleFactor - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть UILabel внутри UITableViewCell, который я хочу динамически регулировать его шрифт и размер в зависимости от содержимого, чтобы всегда поддерживать самый большой шрифт, который он может поддерживать без усечения. Я в большинстве случаев использую adjustsFontSizeToFitWidth, но у метки есть дополнительное вертикальное пространство, в котором она не нуждается.

На этом скриншоте, запущенном на симуляторе iPhone SE, метка правильно уменьшила шрифт от 55, чтобы соответствовать, но есть это дополнительное место в верхней части этикетки. Я хочу, чтобы это место было go далеко!

image

Вот мой код этикетки:

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(), но они никогда не помогали.

1 Ответ

1 голос
/ 18 февраля 2020

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

label.baselineAdjustment = .alignCenters

Вот разница ... верх использует по умолчанию .alignBaselines низ использует .alignCenters:

enter image description here

...