Как вы добавляете вставку к UILabel (iOS Swift)?
Я - разработчик Android, изучающий iOS. Как добавить дополнение (вставка) к UILabel в iOS Swift? Мне не удалось найти простой учебник по этому вопросу. Спасибо.
Также, как я могу добавить поля для элементов пользовательского интерфейса в Swift? Когда я пытаюсь выполнить приведенное ниже, ничего не обновляется (при нажатии "добавить ограничение" ).
![введите описание изображения здесь]()
Ответы
Ответ 1
Это код, который нужно добавить в Swift 3:
class InsetLabel: UILabel {
let topInset = CGFloat(0)
let bottomInset = CGFloat(0)
let leftInset = CGFloat(20)
let rightInset = CGFloat(20)
override func drawText(in rect: CGRect) {
let insets: UIEdgeInsets = UIEdgeInsets(top: topInset, left: leftInset, bottom: bottomInset, right: rightInset)
super.drawText(in: UIEdgeInsetsInsetRect(rect, insets))
}
override public var intrinsicContentSize: CGSize {
var intrinsicSuperViewContentSize = super.intrinsicContentSize
intrinsicSuperViewContentSize.height += topInset + bottomInset
intrinsicSuperViewContentSize.width += leftInset + rightInset
return intrinsicSuperViewContentSize
}
}
Ответ 2
Вероятно, лучшая идея заключается в подклассе UILabel
и переопределении drawTextInRect:
следующим образом:
class InsetLabel: UILabel {
override func drawTextInRect(rect: CGRect) {
super.drawTextInRect(UIEdgeInsetsInsetRect(rect, UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)))
}
}
Ответ 3
нужно добавить следующее:
class InsetLabel: UILabel {
let topInset = CGFloat(12.0), bottomInset = CGFloat(12.0), leftInset = CGFloat(12.0), rightInset = CGFloat(12.0)
override func drawTextInRect(rect: CGRect) {
let insets: UIEdgeInsets = UIEdgeInsets(top: topInset, left: leftInset, bottom: bottomInset, right: rightInset)
super.drawTextInRect(UIEdgeInsetsInsetRect(rect, insets))
}
override func intrinsicContentSize() -> CGSize {
var intrinsicSuperViewContentSize = super.intrinsicContentSize()
intrinsicSuperViewContentSize.height += topInset + bottomInset
intrinsicSuperViewContentSize.width += leftInset + rightInset
return intrinsicSuperViewContentSize
}
}
Ответ 4
Существует решение, просто использующее раскадровку. В раскадровке создайте объект UIView, целью которого будет окружение вашей метки, чтобы дать ей дополнение. Затем, также из раскадровки, поместите ваш UILabel внутри этой точки зрения. Теперь выберите объект UILabel и поднимите всплывающее окно "Добавить новые ограничения", щелкнув значок "Pin". Если вы хотите, чтобы прокладка по 5 вокруг UILabel, щелкните каждый из 4 красных I-балок в всплывающем окне "Добавить новые ограничения" и THEN типа 5 в каждом из четырех ящиков, расположенных рядом с I-лучами. Если вы сначала наберете 5, а затем щелкните I-Beam, XCode вернется к какому-либо значению в поле перед вводом 5. Наконец нажмите кнопку "Добавить ограничения".
В всплывающем окне "Добавить ограничения" XCode игнорирует значения верхнего, левого, правого или нижнего ограничений, для которых вы не нажали соответствующий красный I-луч. Вероятно, это ответ на вторую часть вашего вопроса.
Помните также о настройке ограничений добавляемого UIView. Если вы не определяете, где он находится в раскадровке (например, прикреплены к началу и слева от основного вида контроллера вида), ему не будет назначено местоположение по умолчанию, и оно может вообще не отображаться, когда вы запустите приложение.
Ответ 5
Другим способом было бы переопределить textRect: forBounds: limitedToNumberOfLines:
Возвращает прямоугольник чертежа для текста меток. Переопределить это метод в подклассах, требующий изменений в методах, ограничивающих прямоугольник должен произойти до того, как система выполнит другую текстовую компоновку расчеты. Используйте значение в параметре numberOfLines для ограничения высота возвращаемого прямоугольника до указанного количества строк текста. Этот метод может быть вызван системой, если был предыдущий вызовите метод sizeToFit() или sizeThatFits (_:). Обратите внимание, что метки в объектах UITableViewCell определяются размеры ячеек, а не по запрашиваемому размеру.
public class JPSLabel : UILabel
{
open var textInsets: UIEdgeInsets = UIEdgeInsets.zero
override public func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect
{
var insetBounds = super.textRect(forBounds: bounds, limitedToNumberOfLines: numberOfLines)
insetBounds.size.width += self.textInsets.left + self.textInsets.right
insetBounds.size.height += self.textInsets.top + self.textInsets.bottom
return insetBounds
}
}