Неправильный встроенный размер контента для пользовательского UILabel с отступамиIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Неправильный встроенный размер контента для пользовательского UILabel с отступами

Сообщение Anonymous »

Это мой класс AttributedLabel:
import UIKit

class AttributedLabel: UILabel {
var cornerRadius: CGFloat = 3 {
didSet {
layer.cornerRadius = cornerRadius
}
}

var borderColor: UIColor = .clear {
didSet {
layer.borderColor = borderColor.cgColor
layer.borderWidth = 1
}
}

var masksToBounds: Bool = false {
didSet {
layer.masksToBounds = masksToBounds
}
}

var borderWidth: CGFloat = 1 {
didSet {
layer.borderWidth = borderWidth
}
}

private var strikeThrough = false
private var paddingTop: CGFloat = 0
private var paddingBottom: CGFloat = 0
private var paddingLeft: CGFloat = 0
private var paddingRight: CGFloat = 0
override var text: String? {
didSet {
if strikeThrough {
attributedText = NSAttributedString(string: text ?? "", strikeThrough: true)
}
}
}

// MARK: - Initialization

convenience init(
paddingTop: CGFloat = 0,
paddingBottom: CGFloat = 0,
paddingLeft: CGFloat = 0,
paddingRight: CGFloat = 0,
strikeThrough: Bool = false
) {
self.init()
self.paddingTop = paddingTop
self.paddingBottom = paddingBottom
self.paddingLeft = paddingLeft
self.paddingRight = paddingRight
self.strikeThrough = strikeThrough
backgroundColor = .yellow
}

// MARK: - Overriden

override func drawText(in rect: CGRect) {
let insets = UIEdgeInsets(top: paddingTop, left: paddingLeft, bottom: paddingBottom, right: paddingRight)
super.drawText(in: rect.inset(by: insets))
}

override var intrinsicContentSize: CGSize {
var contentSize = super.intrinsicContentSize
contentSize.height += paddingTop
contentSize.height += paddingBottom
contentSize.width += paddingLeft
contentSize.width += paddingRight
return contentSize
}
}

И вот результат:
[img]https://i.stack.imgur .com/C91gu.jpg[/img]

Первая метка обрезана. Почему? Это определяется следующим образом:
private let titleLabel: UILabel = {
let label = AttributedLabel(paddingLeft: 20, paddingRight: 20)
label.textColor = .mineShaft
label.font = UIFont.poppinsMedium.withSize(18)
label.textAlignment = .left
label.numberOfLines = 0
return label
}()

и ему назначен текст:
titleLabel.text = "Czy jesteś za wdrożeniem aplikacji PLZ?"

Не знаю, имеет ли это значение, но в UIStackView добавляется titleLabel:
contentStackView.addArrangedSubview(titleLabel)


Подробнее здесь: https://stackoverflow.com/questions/783 ... h-paddings
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»