Как расположить и каскадировать новые окна документов в левом верхнем углу экрана?

#nswindow #appkit

#нсокно #appkit

Вопрос:

Когда я создаю новый проект на основе документа с помощью раскадровки в Xcode и запускаю его, новое окно располагается где-то в нижней половине экрана.

Это потому, что начальная позиция устанавливается на это местоположение экрана с пропорциональными соотношениями.

Теперь я скорее хочу, чтобы мои окна начинались в левом верхнем углу, например, в фиксированном положении 20×20 слева от строки меню. Похоже, настройки в Interface Builder этого не предусматривают. Оно либо относительное (тогда положение меняется в зависимости от размера экрана), либо абсолютное, но без возможности определить расстояние от верхней части экрана до верхней части окна.

Кроме того, мне все еще нужно каскадировать новые окна, т. Е. Не устанавливать для каждого нового окна размер 20×20, а каскадировать последующие.

Комментарии:

1. Для меня это похоже на ошибку.

Ответ №1:

  1. Создайте подкласс NSWindowController и назначьте его в качестве контроллера окон в IB.
  2. В этом подклассе перезаписать windowDidLoad :
 - (void)windowDidLoad {
    [super windowDidLoad];

    self.shouldCascadeWindows = YES;

    // Position at top left corner of main screen
    NSWindow *w = self.window;
    NSPoint pos = NSMakePoint (20, 40); // this is where the 1st window appears
    pos.y = NSScreen.mainScreen.frame.size.height - w.frame.size.height - pos.y;
    [w setFrame:CGRectMake(pos.x, pos.y, w.frame.size.width , w.frame.size.height) display:NO];
}