Автоматическая компоновка для динамического размера ширины uilabel
Итак, у меня есть два UILabels бок о бок в Storyboard. Второй ярлык должен быть вставлен против правого края первого (конечное ограничение 1), но мне также нужна первая метка (одна слева), чтобы установить ее ширину, равную его размеру содержимого, если он не достигнет максимальной ширины, Визуально:
| Пометьте один текст | | Обозначить два текста |
И мне нужны следующие ограничения:
1) Метка должна быть изменена по ширине, если она не достигнет максимального размера.
2) Ярлык должен всегда быть вставлен против правого края метки
Как установить это в раскадровке?
Ответы
Ответ 1
- Создайте 1-точечное горизонтальное пространство между метками: Управлять-перетащите от
label2
до label1
. Выберите "Горизонтальный интервал" во всплывающем окне. Дважды щелкните ограничение. Измените константу на 1.
- Дайте
label1
максимальную ширину: выберите label1
. Перейдите в верхнюю строку меню, выберите "Редактор" > "Вывод" > "Ширина". Дважды щелкните ограничение. Измените отношение на <= и измените константу на максимальную ширину.
- Вертикально выравнивайте метки: выберите обе метки. Перейдите в верхнюю строку меню, выберите "Редактор" > "Выровнять" > "Вертикальные центры".
- Вам все равно нужно установить ограничения, определяющие, как ваши метки помещаются в виде контейнера. Я оставлю это до вас. Я привязал
label1
32 точки от левого края корневого представления и 34 точки от верхнего руководства по расположению.
- Обновите фреймы ярлыков, чтобы они отразили указанные выше ограничения. Перейдите в панель меню в правом нижнем углу холста. Нажмите кнопку "Разрешить автоматическую компоновку вопросов" кнопку Tie-Fighter. Во всплывающем окне выберите "Обновить все кадры...".
Примечание. Обратите внимание, что мне не нужно создавать ограничения, чтобы ширина label1
отображала его размер содержимого. Ограничения размера содержимого генерируются автоматически.
![enter image description here]()
Ответ 2
Ниже приведены ограничения для установки гибкой ширины UIlabel и UIButton;
![Установить гибкость UIlabel и UIButton в соответствии с текстом с помощью xib autolayout]()
Ответ 3
Пожалуйста, сначала получите textSize с кодом ниже:
CGSize textSize = { 230.0, 10000.0 };
CGSize size = [[NSString stringWithFormat:@"%@", yourLabelText]
sizeWithFont:[UIFont systemFontOfSize:10]
constrainedToSize:textSize
lineBreakMode:NSLineBreakByWordWrapping];
то установите свой первый фрейм этикетки с этим размером содержимого:
UILabel *lblFirst = [[UILabel alloc] initWithFrame:CGRectMake(X, Y, W, size.height)];
lblFirst.lineBreakMode = YES;
lblFirst.lineBreakMode = NSLineBreakByWordWrapping;
lblFirst.numberOfLines =size.height;
lblFirst.backgroundColor = [UIColor clearColor];
[self.view addSubview:lblFirst];
тогда вторая метка Frame будет:
UILabel *lblFirst = [[UILabel alloc]
initWithFrame:CGRectMake(lblFollowerName.frame.size.width + lblFollowerName.frame.origin.x, Y, W, H)];