У меня возникла странная проблема с моим кодом, и я надеюсь, что у кого-то есть лучшие идеи о том, как с этим справиться.
**Кратко о том, чего я хочу достичь: **
У меня есть редактор, который выглядит так: С правой стороны у меня есть панель инспектора, где я могу вручную изменить рамку текущего выбранного представления (которое находится внутри другого NSView, являющегося представлением документа NSScrollView).
**Обзор реализации: **
Основное представление внутри NSScrollView не использует автомакет напрямую, потому что мне нужно установить фрейм вручную, я оставляю для свойства translatesAutoresizingMaskIntoConstraints значение true (значение по умолчанию) для всех подпредставлений внутри NSScrollView . Таким образом, я получаю ограничения, автоматически создаваемые при установке фрейма.
Проблема:
Когда я устанавливаю кадр, скажем, (1, 0, 100, 100), по какой-то причине механизм автомакета примет во внимание значение увеличения NSScrollView и перенастроит кадр, поэтому окончательный кадр может выглядеть так ( 1,74, 0, 100, 100). Хотя я это понимаю, вопрос в том, могу ли я отключить это поведение? Возможно ли иметь приращение значения кадра 1,0, следя за тем, чтобы Autolayout не закручивал окончательный кадр независимо от значения увеличения NSScrollView?
Спасибо!
1 ответ
Представления Autolayout внутри увеличенного NSScrollView могут время от времени давать очень странные значения, и я действительно не понял, когда и почему.
Я подошел к аналогичной проблеме, отрегулировав положение представлений вручную в соответствии с увеличением супервизора или создав их подклассы и написав для них метод, учитывающий увеличение.
Так, например:
CGFloat factor = 1 / magnification;
element.frame = NSRectMake(x * factor, y * factor, ...);
Надеюсь это поможет.
Похожие вопросы
Новые вопросы
swift
Swift — это язык программирования общего назначения, разработанный Apple Inc., впервые выпущенный в 2014 году для своих платформ и Linux. Swift имеет открытый исходный код. Используйте тег только для вопросов о языковых функциях или необходимости кода в Swift. Используйте теги [ios], [ipados], [macos], [watch-os], [tvos], [swiftui], [cocoa-touch] и [cocoa] для (не зависящих от языка) вопросов о платформах или рамки.