2014-10-27 1 views
2

Итак, у меня есть UILabel, который получает динамическое количество контента из базы данных. Чем больше контента, тем выше высота этикетки.Как сделать динамическую высоту UILabel вытолкнуть другие элементы из своего пути?

Для этого эффекта я использовал этот код:

NSString *infoztext = [dataBase valueForKey:@"infos"]; 
    infoz.text = infoztext; 
    CGSize maxSize = CGSizeMake(320, 410); 
    CGRect labrect = [infoztext boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:infoz.font} context:Nil]; 
    infoz.numberOfLines = 0; 
    infoz.frame = CGRectMake(23, 594, 274, labrect.size.height); 

Это работает как шарм. Метка будет регулировать ее высоту до количества содержимого, которое она получает.

ПРОБЛЕМА заключается в том, что мой ярлык перекрывает все элементы в представлении, которые ниже него, а не отталкивают их.

У меня есть автозапуск включен, но все же ничего не происходит, но перекрывается.

Как я могу заставить ярлык нажимать другие элементы вместо их перекрытия?

+1

Для автоматического завершения работы вам необходимо установить ограничения. Вы устанавливаете какие-либо ограничения в любом месте? (либо в интерфейсе Builder, либо в коде) – rfj001

+0

Обычно я использую Interface Builder. У меня есть все мои элементы, такие как ярлыки и UIImageViews внутри ОДНОГО представления, находящегося внутри ScrollView. Там я установил ограничения. Это самый простой способ заставить ScrollView работать с автоматической компоновкой. Во время тестирования я только что выбрал все свои элементы и установил «добавить недостающие ограничения», но это тоже не помогло мне. – Mariooo

+0

Если я выбираю следующий элемент прямо под моей динамической меткой и устанавливаю «добавление недостающих ограничений», результат заключается в том, что моя динамическая метка будет настраивать только собственную высоту, пока не достигнет элемента под ним, что означает, что он не будет перекрывать его, но он также не будет толкать его. Он будет настраивать только собственную высоту, пока не достигнет другого элемента, а не ограничит его собственный контент. Как и элемент ist, блокирующий ярлык от дальнейшей настройки собственной высоты. – Mariooo

ответ

2

В построителе интерфейса вы можете выбрать элемент (в данном случае элемент сразу под вашим UILabel) и установить ограничения на эту метку. В построителе интерфейса в правом нижнем углу экрана есть 4 значка, выберите один с квадратом посередине. Вы можете выбрать красную форму I между квадратом и верхним текстовым полем. После этого нажмите «Добавить ограничения», и ваше приложение должно поддерживать интервалы между этими двумя элементами постоянными даже после изменения размера UILabel.

Примечание. Вам также необходимо будет сделать это со всеми элементами под UILabel, иначе вы столкнетесь с одной и той же проблемой дальше по экрану.

EDIT: Четыре значка внизу - «Выровнять», «Pin», «Разрешить автоматические макеты» и «Изменение размера поведения». Значок, необходимый для ограничений, - это значок «Pin». Нажмите на это, и красноватый я должен быть рядом с верхней частью маленького окна, которое появляется.

+0

Спасибо. Эти четыре значка, о которых вы, вероятно, говорите, говорят (слева направо) «Выровнять», «Пин», «Разрешить автоматические макеты» и «Изменение размера». Насколько я могу судить, ни квадрат посередине, ни красноватый. Все они монохромные. – Mariooo

+0

Вы ищете иконку «Pin», нажмите на нее, и вы увидите красноватую форму I в верхней части окна щенка. –

+0

Thx Victor это меня намного больше. LET ME SUMMERIZE КАК ЭТО СДЕЛАНО: 1) Выберите элемент как ярлык 2) Нажмите на «штырь» 3) В новом Всплывающие есть квадрат с 4x TextFields во всех четырех направлениях от него. Есть красноватые штрихи TINY. Вы должны НАЖМИТЕ НА ИХ, чтобы «активировать» значение в связанном текстовом поле.Если вы нажмете стрелку вниз рядом с текстовым полем, вы также можете выбрать, какой другой элемент должен быть точкой измерения. Но позвольте мне сказать вам ... У меня есть 20 элементов под динамическим ярлыком, и это боль в * ss, чтобы заставить их всех работать :( – Mariooo

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