AutoLayout не работает после программного изменения размера элементов управления - iOS

Я использую функцию AutoLayout. Все работает правильно, однако, если я изменяю размер каких-либо элементов управления программно, другие подпредставления или элементы управления не располагаются соответствующим образом. Как обновить ограничение после программного изменения размеров любых элементов управления.

or

Будет ли работать AutoLayout после изменения размера элемента управления в коде?

Редактировать:

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

 - (void)textViewDidChange:(UITextView *)textView
    {
    if (textView == pupose_txt_view) {
        CGSize maximumLabelSize = CGSizeMake(self.topic_text_view.frame.size.width,
                                             FLT_MAX);

        UILabel *label = [[UILabel alloc] initWithFrame:pupose_txt_view.frame];
        CGSize expectedLabelSize = [pupose_txt_view.text sizeWithFont:pupose_txt_view.font
                                      constrainedToSize:maximumLabelSize
                                          lineBreakMode:label.lineBreakMode];


        CGRect newFrame = pupose_txt_view.frame;
        newFrame.size.height = expectedLabelSize.height;
        pupose_txt_view.frame = newFrame;
    }
}

person Newbee    schedule 05.07.2013    source источник
comment
Как изменить размер элементов управления, покажите код.   -  person Sven    schedule 05.07.2013
comment
@Sven, пожалуйста, проверьте редактирование.   -  person Newbee    schedule 05.07.2013


Ответы (1)


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

Для этого вы создаете выход для ограничения высоты вашего размера текста и устанавливаете его свойство constant всякий раз, когда вы хотите изменить высоту. Вы также можете удалить ограничения для своего текстового представления и создать новые, но обновление констант является предпочтительным способом, поскольку требует меньше кода и более эффективно во время выполнения.

person Sven    schedule 05.07.2013