Как отключить изменение размера подпредставления NSSplitView в Интерфейсном Разработчике?
Я создал в Интерфейсном Разработчике NSSplitView с двумя подпредставлениями. Я хочу, чтобы вид слева имел фиксированную ширину. Я попытался определить правила автоматического изменения размера для обоих подпредставлений, но левое подпредставление все еще меняет ширину при изменении размера окна (разделенное представление заполняет окно). Может быть, это вызвано свойством NSSplitView Autoresizes Subviews? (Я не могу снять это). Что я могу сделать?
3 ответа
Требуемое поведение требовало некоторого кода, который вы можете выполнять в делегате NSSplitView. Тем не менее, вы можете получить тот же результат, используя BWToolKit.
Лучший способ найти это в Интерфейсном Разработчике:
- Оставьте NSSplitView в окне
- Выберите пользовательский вид, который вы хотите исправить
- Подойдите к меню Xcode и выберите "Редактор"> "Pin"> "Width".
- Настройте константу в инспекторе атрибутов в соответствии с размером, на котором вы хотите закрепить панель
Конечно, вы также можете добавить это ограничение макета с помощью кода, как предложено выше, если вы чувствуете себя авантюрным.
Я думаю, что это должно работать с NSLayoutConstraint, я работаю в настоящее время на:).
РЕДАКТИРОВАТЬ:
Может быть, предоставить более подробную информацию о моем ответе на основе комментария Хайдена. Вы можете определить ограничение либо по коду, либо в IB. В IB выберите свое левое подпредставление и нажмите на кнопки ограничения в правом нижнем углу, определяющие ограничения ширины. Если вы выберете это новое ограничение сейчас, вы можете установить ширину, скажем, она должна быть равна, и установить размер, который вам нравится.
Вторым способом является создание в коде объекта NSLayoutConstraint, я делаю это так (это всего лишь пример, а не определение фиксированной ширины).
// define for the view: Constraint and AutoresizingMask option
NSView *view = self.view;
[view setTranslatesAutoresizingMaskIntoConstraints:NO]; // disable AutoresizingMask
NSDictionary *views = NSDictionaryOfVariableBindings(view);
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[view(>=140,<=220)]" options:0 metrics:nil views:views]];
В общем, вы найдете документацию по этой теме под термином " Автоматическая разметка". Чтобы использовать его, вы должны включить автоматическую разметку, и эта функция заменит старые функции автоматического изменения размера. (поэтому я отключаю маску авторазмера в коде).
Эта функция совсем новая, и вы можете делать с ней сложные вещи, но я думаю, что стоит изучить.