Это мой класс 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
Неправильный встроенный размер контента для пользовательского UILabel с отступами ⇐ IOS
Программируем под IOS
1713005698
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)
Подробнее здесь: [url]https://stackoverflow.com/questions/78317607/wrong-intrinsiccontentsize-for-custom-uilabel-with-paddings[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия