У меня возникла странная проблема с моим кодом, и я надеюсь, что у кого-то есть лучшие идеи о том, как с этим справиться.

**Кратко о том, чего я хочу достичь: **

У меня есть редактор, который выглядит так: С правой стороны у меня есть панель инспектора, где я могу вручную изменить рамку текущего выбранного представления (которое находится внутри другого NSView, являющегося представлением документа NSScrollView).

**Обзор реализации: **

Основное представление внутри NSScrollView не использует автомакет напрямую, потому что мне нужно установить фрейм вручную, я оставляю для свойства translatesAutoresizingMaskIntoConstraints значение true (значение по умолчанию) для всех подпредставлений внутри NSScrollView . Таким образом, я получаю ограничения, автоматически создаваемые при установке фрейма.

Проблема:

Когда я устанавливаю кадр, скажем, (1, 0, 100, 100), по какой-то причине механизм автомакета примет во внимание значение увеличения NSScrollView и перенастроит кадр, поэтому окончательный кадр может выглядеть так ( 1,74, 0, 100, 100). Хотя я это понимаю, вопрос в том, могу ли я отключить это поведение? Возможно ли иметь приращение значения кадра 1,0, следя за тем, чтобы Autolayout не закручивал окончательный кадр независимо от значения увеличения NSScrollView?

Спасибо!

1
Andy 1 Апр 2020 в 16:54

1 ответ

Представления Autolayout внутри увеличенного NSScrollView могут время от времени давать очень странные значения, и я действительно не понял, когда и почему.

Я подошел к аналогичной проблеме, отрегулировав положение представлений вручную в соответствии с увеличением супервизора или создав их подклассы и написав для них метод, учитывающий увеличение.

Так, например:

CGFloat factor = 1 / magnification;
element.frame = NSRectMake(x * factor, y * factor, ...);

Надеюсь это поможет.

1
Tritonal 15 Май 2020 в 13:56