Как я могу добавить отступы к внутреннему размеру контента 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 совпадает с его родительским представлением, то я не понимаю, в чем проблема, просто используйте автоматическое расположение, чтобы указать, сколько места вы хотите, относительно того, что рядом с ним.