Почему мои NSViews в моем NSWindow не изменяются при изменении размера окна?

Я рву на себе волосы, пытаясь понять, почему мои представления не изменяются в размерах, когда мой NSWindow перетаскивается.

Хорошо, вот моя структура:

  • Subclassed NSWindowController's View (Use Auto Layout Checked for window. Auto Resize checked for view. Window's View not hooked up to anything in IB, should it be?)
    • Various Buttons
    • Custom View (Auto Resizes Subviews checked)
      • Subclassed NSViewController's View (Auto Resizes Subviews & Translates Mask checked)
        • Various Subviews (Auto Resizes Subviews checked)
      • Subclassed NSViewController's View (Auto Resizes Subviews & Translates Mask checked)
        • Various Subviews (Auto Resizes Subviews checked)

Я добавляю каждое из этих представлений в собственное представление моего NSWindowController. Это единственный подходящий метод в моем файле:

-(void)setActiveView:(NSString*) viewString{
    if ([currentViewController view] != nil)
        [[currentViewController view] removeFromSuperview];    

    if ([viewString isEqualToString:kFirstView]){
        FirstViewController *viewController = [[FirstViewController alloc]initWithNibName:kFirstView bundle:nil];
        if (viewController != nil){
            currentViewController = viewController;
        }

    }

    else if ([viewString isEqualToString:kSecondView]){
        SecondViewController *viewController = [[SecondViewController alloc]initWithNibName:kSecondView bundle:nil];
        if (viewController != nil){
            currentViewController = viewController;
        }
    }

    //Resize Controller to Window's size.
    [[currentViewController view] setFrame:[myWindowView bounds]];

    //Embed current view into Custom View in host view.
    [myWindowView addSubview:[currentViewController view]];


}

SetFrame для изменения размера работает, когда я меняю представления, но не когда я перетаскиваю, чтобы изменить размер окна. Насколько я могу судить, поскольку setFrame работает, когда я меняю представления, единственное, что действительно имеет значение (но не работает), — это пользовательское представление внутри моего NSWindowController.

Кроме того, вот как я выдвигаю это окно:

    myController = [[MyWindowController alloc]initWithWindowNibName:@"MyWindow"];
    [myController showWindow:nil];

Да, я уже пробовал в своем initwithframe:

[myWindowView setAutoresizesSubviews:YES];
[myWindowView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

Что мне не хватает?


person aroooo    schedule 18.04.2012    source источник
comment
Попробуйте использовать только один контроллер внутри вашего окна и поместите все остальные представления в представление этого контроллера. Я не совсем уверен, но у iphone есть проблема, заключающаяся в том, что UIWindow отправляет события пользовательского интерфейса только первому контроллеру в своем дочернем массиве. В вашем случае может быть что-то подобное.   -  person Behlül    schedule 21.04.2012


Ответы (1)


Попробуйте сделать это без Auto Layout.

Попробуйте это:

  • Снимите флажок Использовать автоматический макет для окна.

  • Перейдите в Инспектор размеров и выполните автоматическое изменение размера для ваших представлений следующим образом:

    autosizing

person Justin Boo    schedule 21.04.2012
comment
Я очень надеялся, что это сработает, но, к сожалению, этого не произошло. :( - person aroooo; 22.04.2012
comment
@incarna Хм .. Это должно работать, может быть, вы можете создать пример проекта с этой проблемой и отправить мне его? - person Justin Boo; 22.04.2012
comment
Ваш ответ на самом деле привел меня в правильном направлении: после того, как я немного повозился, делая это для каждого из моих представлений, я на самом деле просто вернул их все обратно в Auto-Layout, и он снова начал работать. Интересно, была ли это проблема с самим Auto Layout? - person aroooo; 23.04.2012