2013-06-27 1 views
3

Я не использую Auto Layout, потому что мне нужно, чтобы поддержать IOS 5. Теперь я получаю NSInternalInconsistencyException когда я нажимаю контроллер:Как отключить автоматический макет для представления из кода?

Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Auto Layout still required after executing -layoutSubviews. 
SGBExampleView's implementation of -layoutSubviews needs to call super.' 

Моя реализация layoutSubviews делает вызов [супер layoutSubviews] , так что это бесполезно. Кажется, что что-то включило Auto Layout для моего представления; Я хотел бы снова отключить его. Тем не менее, все, что я могу найти, что говорит, как отключить его, говорит, чтобы сделать это от IB. Я не использую IB. Как отключить автоматический макет для представления из кода?

ОБНОВЛЕНИЕ:

Этот вопрос не дубликат, как и другие относится конкретно к подклассу UITableViewCell, и установка translatesAutoresizingMaskIntoConstraints либо ДА или НЕТ не имеет никакого эффекта.

+0

Нет, это не так. Исключение составляет одно и то же, но этот вопрос связан с тем, как получить автоматический макет для работы с ячейками таблицы; Мой взгляд не является ячейкой таблицы, и я не хочу, чтобы автоматическая компоновка работала, я хочу отключить ее. – Simon

+0

согласился, что это не дубликат. Другой вопрос был специфичен для UITableViewCell –

+0

, почему вы используете layoutSubviews, если используете автоматическую компоновку? –

ответ

1

Чтобы отключить Auto Layout для зрения, просто не имеют каких-либо ограничений, которые связаны с этой точкой зрения:

Для обеспечения дополнительной совместимости, все ограничения на основе Система компоновки не активна на всех, пока вы не установите ограничение на вид .

См. Cocoa Auto Layout Guide. Да, это относится к какао, а не к iOS. Однако принцип будет таким же.

+0

Есть ли способ отключить его, если что-то еще добавило ограничение? Удаление существующих не похоже на работу. – Simon

+0

Почему бы не переопределить методы addConstraint и addConstraints в вашем подклассе UIView с методами, которые ничего не делают? –

+0

Хорошая идея - я попробую. – Simon

0

Недавно я был добавлен в проект, который был инициирован с автоматической компоновкой, но мне нужно было динамически корректировать некоторые кадры в коде. Это то, что я сделал, чтобы не быть обесцененным автоматически создаваемыми ограничениями времени выполнения (любезно предоставлено автоматическим макетом):

1) НЕ имеют вид или компоненты, выложенные в конструкторе интерфейса.

2) Добавьте свои представления чисто программно, начиная с alloc/init и соответствующим образом настроив их рамки.

3) Выполнено.

Надеюсь, что это поможет!

пс. вы также можете поэкспериментировать с ограничениями снятия с представлений с помощью:

[просмотреть removeConstraints: view.constraints] , но мне больше повезло с использованием чистого кода.