UILabel текстовое поле - PullRequest
       45

UILabel текстовое поле

297 голосов
/ 13 августа 2010

Я пытаюсь установить левую вставку / поле UILabel и не могу найти способ сделать это. У метки есть задний фон, поэтому просто смена источника не поможет. Было бы идеально вставить текст с помощью 10px или около того с левой стороны.

Ответы [ 38 ]

0 голосов
/ 29 июня 2018

Если метка создается программно, заполнение можно рассчитать с помощью метода sizeThatFits.Если используется более одной строки, текст будет разбит на строку с максимальным значением ширины.

let text = UILabel()
let padding = 10
text.layer.cornerRadius = 5
text.layer.masksToBounds = true
text.text = "Hello"
text.font = UIFont(name: text.font.fontName, size: 18)
text.textAlignment = NSTextAlignment.center
text.numberOfLines = 1

let maxSize = CGSize(width: 100, height: 100)
var size = text.sizeThatFits(maxSize)
size.width = size.width + padding * 2
size.height = size.height + padding * 2
text.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: size)
0 голосов
/ 02 апреля 2014

Чтобы избавиться от вертикального отступа для однострочной метки, я сделал:

// I have a category method setFrameHeight; you'll likely need to modify the frame.
[label setFrameHeight:font.pointSize];

ИЛИ без категории, используйте:

CGRect frame = label.frame;
frame.size.height = font.pointSize;
label.frame = frame;
0 голосов
/ 04 февраля 2018

Многие из этих ответов сложны. В некоторых случаях это необходимо. Однако, если вы читаете это, у вашего ярлыка нет левого / правого поля, и вам просто нужно немного заполнить, вот и все решение:

Шаг 1. Добавьте пробелы в конце (буквально, нажмите несколько раз пробел)

Шаг 2: Установите выравнивание текста метки по центру

Готово

0 голосов
/ 05 января 2017

Не кодируйте, Xcode!

Вместо использования UILabel для этого конкретного вопроса, я предлагаю вам взглянуть на UIButton .Это дает из коробки возможность установить Вставки содержимого (вверху, слева, внизу, справа) в Инспекторе размера.Установите нужные поля, после этого отключите кнопку прямо в Xcode и сделайте.

0 голосов
/ 30 декабря 2016

Просто добавьте пробелы слева , если это одна строка , более чем в 1 строке снова будет добавлено 0 символов.

[self.myLabel setText:[NSString stringWithFormat:@"   %@", self.myShortString]];
0 голосов
/ 04 сентября 2012

Может быть, вы могли бы попробовать этот код

CGRect frame = btn.titleLabel.frame;
int indent = 20;
int inset = 20;
[btn.titleLabel setFrame:CGRectMake(frame.origin.x+inset,frame.origin.y,frame.size.width+indent,frame.size.height)];
0 голосов
/ 07 марта 2019

Вам необходимо рассчитать размер UILabel при установке вкладышей. Может иметь различное количество строк из-за выравнивания текста, режима разрыва строки.

override func drawText(in rect: CGRect) {

    let size = self.sizeThatFits(UIEdgeInsetsInsetRect(rect, insets).size);
    super.drawText(in: CGRect.init(origin: CGPoint.init(x: insets.left, y: insets.top), size: size));
}

override var intrinsicContentSize: CGSize {

    var size = super.intrinsicContentSize;

    if text == nil || text?.count == 0 {
        return size;
    }

    size = self.sizeThatFits(UIEdgeInsetsInsetRect(CGRect.init(origin: CGPoint.zero, size: size), insets).size);
    size.width  += self.insets.left + self.insets.right;
    size.height += self.insets.top + self.insets.bottom;

    return size;
}

попробуйте iEun / InsetLabel

0 голосов
/ 13 августа 2010

Я думаю, что UILabel класс не имеет метода для установки поля. Почему вы не установили положение метки в нужном месте?

См. Ниже код:

UILabel *label = [[UILabel alloc] init];
label.text = @"This is label";
label.frame = CGRectMake(0,0,100,100);

если из конструктора интерфейса, просто расположите Label следующим образом:

yourLabel.frame = CGRectMake(0,0,100,100);
...