2017-02-21 6 views
0

Лучший способ описать мои ситуации - это изображения. У меня есть вид, который содержит несколько UILabel s и UIImage. Красный квадрат - UILabel, и если содержимое слишком велико, оно должно перейти ко второй строке.UILabel на второй строке, если содержимое не соответствует первой строке представления

Из раскадровки У меня есть рабочий корпус, когда содержимое подходит, но проблема в том, что я не уверен, как обрабатывать случай, когда последний (красный ящик) должен перейти ко второй строке. Я использую autolayout и cartography.

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

enter image description here enter image description here

+0

Хочет, чтобы сделать текст две строки в одной метке ? Если это так, вы можете сделать это, установив numberOfLine = 0. Это то, что вам нужно? – Janmenjaya

+0

использовать ограничение больше, чем равное, и http://stackoverflow.com/a/39888662/6656894 refer this –

+0

@Janmenjaya, нет, я не хочу этого. Я просто хочу переместить весь ярлык на второй строке, если ti слишком большой. – charbinary

ответ

1

Сначала вычислите ширину текста в соответствии с положением вашего текущего ярлыка.

Если ширина текста больше ширины текущей этикетки затем увидеть мой ответ из ниже ссылки:

Auto Layout how to move the view2 from right to the bottom?

ширин Calculate:

func widthForView1(_ text:String, font:UIFont, height:CGFloat) -> CGFloat 
{ 

let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: your_label_width, height: your_lable_height)) 
label.numberOfLines = 0 
label.lineBreakMode = NSLineBreakMode.byWordWrapping 
label.text = text 
label.font = font 
label.sizeToFit() 
return label.frame.width 
} 
+0

Я принял ваш ответ, и я удается сделать это таким образом, но как правильно проверить, не находится ли правый угол uilabel по ширине родителя? – charbinary

+0

См. Отредактированный ответ. –

+0

спасибо! Я проверю – charbinary

0

Использование тега View может решить эту проблему. TagListView - это внешняя библиотека. Когда вы добавляете представление в качестве подкласса taglistView, его высота автоматически увеличивается.

ADD это стручок файл: стручок 'TagListView'

func addTags() { 
     let str1 = "Hi" 
     tagListView.addTag(str1) 
     let str2 = "Helloo" 
      tagListView.addTag(str2) 
     let str3 = "How Are u ? " 
     tagListView.addTag(str2) 
     tagListView.isUserInteractionEnabled = false 
    } 
+0

Я не уверен, что вы имеете в виду. Не могли бы вы дать дополнительную информацию – charbinary

0

Вы не можете сделать это только с ограничениями. Чтобы изменить всю позицию элемента на экране, вам нужно сделать это программно.

+0

, это нормально. Но я хотел бы знать, что будет лучшим, правильным и простым способом. Только логика – charbinary

+1

Логика следующая: 1. Место LABEL на линии 1 (например, в раскадровке) 2. Установите текст LABEL 3. Учитывайте его размер (он подходит или должен быть заменен?) 4. Если размер == OK -> оставьте его как есть else -> заменить ярлык Для этого вам может потребоваться сохранить некоторые ограничения в качестве свойств (например, верхнее ограничение LABEL и верхнее ограничение вида Line2 2) – Evgeniy

Смежные вопросы