Я пытаюсь увеличить NSScrollView
, который содержит NSTextView
, и всегда держать его в центре его содержимого.NSTextView
имеет левую / правую вставки, чтобы обеспечить согласованность переноса слов и держать абзацы в центре вида.
И у [NSScrollView scaleUnitSquareToSize:...]
, и у setMagnification:...
есть свои причуды и проблемы, нона данный момент setMagnification кажется лучшим вариантом, поскольку он не относительный.
Вот что происходит (среди прочих странных вещей):
При изменении размера я обновляювставки:
CGFloat inset = self.textScrollView.frame.size.width / 2 - _documentWidth / 2;
self.textView.textContainerInset = NSMakeSize(inset, TEXT_INSET_TOP);
self.textView.textContainer.size = NSMakeSize(_documentWidth, self.textView.textContainer.size.height);
Увеличение:
CGFloat magnification = [self.textScrollView magnification];
NSPoint center = NSMakePoint(self.textScrollView.frame.size.width / 2, self.textScrollView.frame.size.height / 2);
if (zoomIn) magnification += .05; else magnification -= .05;
[self.textScrollView setMagnification:magnification centeredAtPoint:center];
Все вроде работает какое-то время.Иногда, в зависимости от того, из какого угла окна изменяется размер окна, ScrollView теряет свой центр, и я не нашел решения для повторного центрирования вида увеличенного NSScrollView
.
После увеличения макетаограничения могут также нарушаться при изменении размера окна, особенно когда textContainer
обрезается вне поля зрения, и приложение вылетает со следующей ошибкой: *** Assertion failure in -[NSISLinearExpression addVariable:coefficient:], /Library/Caches/com.apple.xbs/Sources/Foundation/Foundation-1349.91/Layout.subproj/IncrementalSimplex/NSISLinearExpression.m:716
Одной из проблем может быть то, что я устанавливаю вставкив соответствии с UIScrollView
размером кадра, потому что содержащиеся в NSTextView координаты кажутся не относительными, а абсолютными после увеличения.
Существует ли какой-либо безопасный способ увеличения вида такого вида и сохранения его в центре его содержимого ввсе время?И почему мои ограничения ломаются?