Автоматическая компоновка для динамического размера ширины 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)];