Я создаю прототип приложения для iPad, которое рисует диаграммы. У меня есть следующая иерархия представлений:
UIView
UIScrollView
DiagramView: UIView
TabBar
Панель навигации
И подкласс UIViewController, хранящий все это вместе.
Перед тем как нарисовать диаграмму в первый раз, я вычисляю размеры диаграммы и устанавливаю для кадра DiagramView этот размер, а также размер содержимого прокрутки.
-(void)recalculateBounds
{
[renderer diagram:diagram shouldDraw:NO];
SQXRect diagramRect = SQXMakeRect(0.0,0.0,[diagram bounds].size.width,[diagram bounds].size.height);
self.frame = diagramRect;
[(UIScrollView*)[self superview] setContentSize:diagramRect.size];
}
Я должен раскрыть, что в кадре установлено значение 1500 x 3500, что, как я знаю, смешно. Я просто хочу сосредоточиться на некоторых других частях приложения, прежде чем приступить к оптимизации кода рендеринга.
Это прекрасно работает, за исключением того, что прямоугольник, передаваемый drawRect, не является тем размером, который я установил, и мой рисунок обрезается внизу. Это близко к размеру, который я установил, но больше по ширине и короче по высоте.
Также следует отметить тот факт, что если я заставлю фрейм быть намного больше, чем то, что, как я знаю, нужно для диаграммы, то drawRect: rect будет достаточно большим, и отсечение не произойдет. Конечно, это заставляет меня задуматься, должен ли размер кадра принимать во внимание некоторые другие свойства экрана, такие как панели инструментов, но мое чтение документов говорит мне, что кадр находится в координатах суперпредставления, что будет просмотром прокрутки, поэтому я считаю, что не делать этого нужно беспокоиться о таких вещах.
Есть идеи, что вызывает это несоответствие?