Изменение высоты XIB контроллера

Рейтинг: 1Ответов: 2Опубликовано: 10.11.2014

При инициализации вьюха моего XIB контроллера получает определенные размеры. В нем есть текстовое поле, при печатании текста в котором оно увеличивается в высоту. Под ним еще таблицы, кнопки и прочее, которые смещаются вниз благодаря auto layout. Однако при смещении вниз сама вьюха контроллера размера своего не меняет. Как сделать так, чтобы он менял свой размер?

ЗАМЕЧАНИЕ: В общем, проблема в следующем: даже если все убрать и оставить один лишь UITextView, при вводе туда текста размер его не увеличивается. В чем проблема?

alt text

Ответы

▲ 1Принят

В общем, пришлось в делегате textViewDidChange вручную менять размеры self.view.frame.

▲ 2

Однако при смещении вниз сам контроллер размера своего не меняет. Как сделать так, чтобы он менял свой размер?

Пишите вопросы правильно, а то не будете получать ответы, либо, что еще хуже, ответы будут такие же, как и вопросы. Как я и говорил, контроллеры не имеют размеров, это можно узнать из документации: UIViewController, но ViewController имеет свойство view. Собственно, благодаря экстросенсорным способностям, можно предположить, что Вы хотите изменить его размер?
Если же это так и Вы используете автолайауты, то Вам всего-навсего нужно создать Constraint между нижней гранью последней вьюхи (если я понял правильно, это текстовое поле) и нижней части виьюхи контроллера, которая, как я опять же догадываюсь, является superview Вашим UITextField'ам. Если вы это делается в IB, то обратите внимание на свойство constant - оно должно быть равным 0. Таким образом главная вьюха будет расширятся/сужаться (по вертикали) в зависимости от расположения текстового поля.
P.S. Здесь я исчерпал магию, может, кто еще из ребят поможет?

UPD

ЗАМЕЧАНИЕ: В общем, проблема в следующем: даже если все убрать и оставить один лишь UITextView, при вводе туда текста размер его не увеличивается. В чем проблема?

Подобный вопрос решается установкой свойства:

[textView setScrollEnabled:NO];

Если вы установили внутренние констрейны как:

    [textView setContentHuggingPriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisHorizontal];//Понижаем приоритет по горизонтали для хаггинга
    [textView setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
    [textView setContentCompressionResistancePriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisHorizontal];//Понижаем приоритет по горизонтали для компрессии, чтобы текстовая вьюха ресайзилась только по вертикали.
    [textView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];

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