2015-03-01 3 views
0

Я не использую автоматическую компоновку в любом из файлов nib. Я загружаю NSViewController, а затем добавляю его представление в другой NSView вручную. Однако, когда я делаю это, я вижу эту ошибку:Не использовать автоматическую компоновку, но см. «Ошибка одновременного удовлетворения ограничений»

Невозможно одновременно удовлетворяют ограничениям

Это не имеет никакого смысла для меня, так как я не autolayout включен в любом месте. Я специально отключил его. У меня есть контроль над загружаемым NSViewController и NSView, к которому я добавляю его. Что я могу сделать, чтобы исправить это?

ответ

0

Автоматический макет включен (или нет) на уровне окна. Если любой вид в окне имеет ограничения, добавленные к нему или переопределяющие +requiresConstraintBasedLayout, чтобы вернуть YES, тогда для окна разрешено автомасштабирование. Любые представления, которые не закодированы для участия в макете авто, вероятно, оставят translatesAutoresizingMaskIntoConstraints, поэтому они все равно будут работать так же, как в окне пружин и распорок.

Возможно, что при определенных обстоятельствах какао может добавить ограничения. Некоторые виды какао, такие как NSStackView, возвращают YES от +requiresConstraintBasedLayout.

Используете ли вы некоторые из последних функций в своем окне, например аксессуары для штрих-кодов?

+0

Спасибо! Да, я использую «NSTitlebarAccessoryViewController», если это то, что вы имеете в виду, чтобы подделать увеличенную высоту окна. Я не использую NSStackView и просто загружаю nibs с NSOutlineView в основное окно. Считаете ли вы, что контролер вспомогательного вида является виновником? Я проверил все мои перья, и у них есть «translatesAutoresizingMaskIntoConstraints», установленный на «НЕТ» - должны ли они все быть настроены вместо YES? – strangetimes

+0

В общем, представления верхнего уровня в NIB должны иметь 'translatesAutoresizingMaskIntoConstraints' (TAMIC), установленный в' YES'. Некоторые контроллеры загружают NIB и добавляют представление в иерархию представлений. Если этот контроллер имеет автоматическую компоновку, он будет настраивать TAMIC, если это необходимо. Если этот контроллер не знает об автоматическом макете, вы хотите, чтобы TAMIC установил значение «YES», если окно использует автоматическую компоновку, поэтому оно ведет себя так, как ожидалось. Для просмотров в окнах или представлениях верхнего уровня TAMIC должен быть «НЕТ», если в NIB включен автоматический макет, иначе «YES». –

+0

А я вижу. Спасибо за это, я поеду, верну их и посмотрю, исправляет ли это это для меня. – strangetimes

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