2015-05-29 4 views
1

Я пытаюсь сделать UILabel расти, удалив ограничения с помощью removeFromSuperview. Текстовое поле 1 удаляется. Но он по-прежнему не позволяет ширине UILabel. Я привел пример кода here для справки. Его полностью на доске объявлений.Автоматическое удаление макета из супервизора не обновляется

Вот мой метод ViewDidLoad:

self.label1.text = @"label 1"; 
    self.label2.text = @"label 2"; 
    self.textfield1.text = @"text field 1"; 
    self.textfield2.text = @"text field 2"; 
    [self.textfield1 removeFromSuperview]; 

Я не хочу иметь IBOutlet из ограничений и обновить его на код. Я пытаюсь получить это на раскадровке на этот раз.

+0

Может быть, вам нужно вызвать '[self.view setNeedsLayout]'? – Zhang

ответ

1

Я думаю, что ваш ярлык 2 зависит от его положения с текстовым полем 1, и вы хотите, чтобы метка 2 увеличивалась, чтобы занять пространство текстового поля 1 при удалении текстового поля 1. Однако, поскольку метка 2 (например, 20 пикселей до право текстового поля 1), когда вы удаляете текстовое поле 1, это ограничение удаляется (теперь оно недействительно, поскольку текстовое поле 1 больше не существует!), а по умолчанию создается по сравнению с супервидом.

Существует простое решение, но оно довольно несовершенное - вместо удаления из супервизора установите ширину текстового поля 1 на 0. Затем вы увидите изменение в позиции метки 2.

Для большего контроля, однако, я думаю, что у вас все еще есть ограничение IBOutlet.

+0

Я хочу, чтобы label2 занимал пространство текстового поля1. –

+0

Это все тот же принцип. Я обновлю ответ, если это вас беспокоит. –

+0

Конечно, можете ли вы его обновить? –

1

С помощью следующей техники вместо удаления текстового поля вы можете просто установить свой текст в ноль. Его внутренний размер содержимого будет иметь нулевую ширину, и ваша метка будет расширяться, чтобы заполнить дополнительное пространство.

  • Ограничьте как метку, так и текстовое поле до ближайшего края его супервизора (т. Е. 1 ограничение каждого) и ограничьте их вертикальное положение по своему усмотрению.
  • Добавьте горизонтальное ограничение пространства между меткой и текстовым полем (например, с постоянным разрывом в 8 баллов).
  • Увеличьте приоритет сопротивления сжатию текстового поля и его приоритет по обложению содержимым (оба по горизонтали).

Im предполагается, что ваш макет выглядит примерно так:

|[label][textField]|