Как установить размер NSView программно?

Как вы устанавливаете размер NSView программно, например.

    -(void)awakeFromNib {
        self.frame.size.width   = 1280;   // Does nothing...
        self.frame.size.height  = 800;    // ...neither does this.
        ...

Настройка размера в nib (Mac OSX) работает нормально, но я хочу сделать это в коде.


person Robin Pain    schedule 17.12.2010    source источник


Ответы (3)


Когда вы вызываете self.frame, он возвращает данные во фрейме, а не указатель. Поэтому любое изменение результата не отражается в представлении. Чтобы изменить вид, вы должны установить новый кадр после внесения изменений:

- (void)awakeFromNib {
    NSRect f = self.frame;
    f.size.width = 1280;
    f.size.height = 800;
    self.frame = f;
    //...
}
person ughoavgfhw    schedule 17.12.2010
comment
Большое спасибо. Я потерял волю к жизни. Теперь не только что-то начало происходить, но я обнаруживаю, что это неправильный вопрос, ответ на который ниже. - person Robin Pain; 18.12.2010

Используйте метод -setFrameSize: или -setFrame:

person ericg    schedule 17.12.2010
comment
Правильный ответ. Прямое изменение свойства фрейма, похоже, не работает, по крайней мере, в Swift. - person udondan; 17.01.2015

Чтобы программно настроить размер приложения (это то, что я хотел сделать), вам нужно сделать следующее: -

- (void)awakeFromNib {
    ...
    NSWindow* w = [self window];
    NSRect f;
    f.size.width  = 1280;
    f.size.height = 800;
    [w setFrame:f display:YES];
}
person Robin Pain    schedule 18.12.2010