Я иногда хочу программно изменить размеры NSView. Для этого полезно получить размеры различных видов, настроить их относительно друг друга, а затем использовать setFrame: для изменения положения.
Проблема в том, что метод frame обычно возвращает NSRects, которые, на мой взгляд, явно неверны.
У меня есть программа с NSPanel, настроенная в Интерфейсном Разработчике, и различные соединения с моей основной программой. Чтобы проверить NSRect, возвращаемые по фрейму, я открыл панель в методе awakeFromNib: моего приложения, получил несколько NSRect и распечатал их в консоли.
Вот мой бодрствующий отNib:
- (void)awakeFromNib {
NSLog(@"in awakeFromNib");
[self showPrefsSheet:self]; //this is the prefs sheet with the controls of interest
//note that it does indeed pop up and is displayed
originalFrame = [aTextView frame];
NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
originalFrame = [aButton frame];
NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
return;
}
Результаты этого кода выглядят так в консоли:
in awakeFromNib
the frame is 0, 0, 0, 0
the frame is 0, 1079230464, 0, 1078329344
Обратите внимание, что (i) панель и оба элемента управления отображаются на экране; (ii) я точно знаю, что розетки правильно подключены, потому что я могу программно что-то делать с элементами управления и заставлять их работать; (iii) построитель интерфейса показывает правильные размеры кадров в Инспекторе в разделе «Размер и положение».
Короче говоря, все остальное в программе работает отлично. На самом деле кажется, что размеры кадра установлены неправильно или что-то в этом роде.
Может кто-нибудь сказать мне, как получить информацию о реальном кадре? Или хотя бы объяснить результаты, которые я вижу?