Как я могу добавить отступы к внутреннему размеру контента UILabel?

Я использую autolayout на iOS7, и у меня есть проблема как это:

Я помещаю UILabel в UIView, и я организую свои ограничения для автоматического размещения так, чтобы метка centerX = centerX родительского представления. Я не даю никаких ограничений по ширине надписи. Когда я устанавливаю текст метки во время выполнения, метка отрисовывается достаточно широко, чтобы текст уместился, нет полей / отступов слева и справа. Я хочу иметь отступы слева и справа, чтобы текст начинался не с того места, где начинается метка. Хаком для достижения этой цели может быть установка текста как @" text ", но, конечно, это не тот путь, по которому можно пойти:)

Как я могу достичь того, чего хочу?

4 ответа

Решение

Вы можете расширить UILabel и переопределить intrinsicContentSize самостоятельно. Пожалуйста, убедитесь, что вы также установили textAlignment = NSTextAlignmentCenter.

-(CGSize)intrinsicContentSize{
    CGSize contentSize = [super intrinsicContentSize];
    return CGSizeMake(contentSize.width + 50, contentSize.height);
}

Это, вероятно, работает, только когда у вас есть только одна строка текста для отображения.

Вы можете создать подкласс UILabel и переопределить intrinsicContent,

-(CGSize)intrinsicContentSize {
    CGSize s = [super intrinsicContentSize];
    s = CGSizeMake(s.width + 20, s.height);
    return s;
}

Это добавит отступ в 20 пунктов к ширине. Если вы хотите, чтобы ваш текст был посередине, обязательно установите выравнивание текста по центру.

Если вы используете автоматический макет, вы можете установить горизонтальные ограничения и использовать NSDictionary в metrics параметр, чтобы установить это динамически.

Например, если вы хотите дать 10pt отступ для внутреннего содержимого UIButtonВы можете сделать что-то вроде следующего:

NSDictionary *padding = @{ @"padding" : @(button.intrinsicContentSize.width + 20) };
NSArray *buttonHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button(==padding)]|" options:0 metrics:padding views:NSDictionaryOfVariableBindings(button)];

Если вы пытаетесь присвоить UILabel другой цвет по сравнению с его родительским представлением, то вам нужно будет заключить UILabel в UIView с отступом и нужным цветом фона. Если ваш цвет фона UILabels совпадает с его родительским представлением, то я не понимаю, в чем проблема, просто используйте автоматическое расположение, чтобы указать, сколько места вы хотите, относительно того, что рядом с ним.

Другие вопросы по тегам