【问题标题】:Why aren't my NSViews in my NSWindow resizing when the window is resized?调整窗口大小时,为什么我的 NSWindow 中的 NSViews 没有调整大小?
【发布时间】:2012-04-21 13:55:16
【问题描述】:

我正在努力弄清楚为什么我的视图没有在拖动时调整我的 NSWindow 的大小。

好的,这是我的结构:

  • NSWindowController 的子类视图(使用自动布局检查窗口。自动调整大小检查视图。窗口的视图没有连接到 IB 中的任何东西,应该是吗?)
    • 各种按钮
    • 自定义视图(选中自动调整子视图大小)
      • 子类化 NSViewController 的视图 (选中 Auto Resizes Subviews & Translates Mask)
        • 各种子视图(选中自动调整子视图大小)
      • 子类化 NSViewController 的视图 (选中 Auto Resizes Subviews & Translates Mask)
        • 各种子视图(选中自动调整子视图大小)

我将这些视图中的每一个添加到我的 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];

我错过了什么?

【问题讨论】:

  • 尝试在您的窗口中仅使用一个控制器,并将所有其他视图放入该控制器的视图中。我不太确定,但 iphone 有一个问题,即 UIWindow 仅将 UI 事件发送到其子数组中的第一个控制器。你的情况可能是这样的。

标签: objective-c macos nswindow nsviewcontroller autoresizingmask


【解决方案1】:

尝试不使用自动布局

试试这个:

  • 取消选中 Use Auto Layout 用于窗口。

  • 转到 Size 检查器 并像这样对您的视图进行 autosizing

【讨论】:

  • 我真的希望这会奏效,不幸的是它没有。 :(
  • @incarna 嗯.. 它应该可以工作,也许你可以创建有这个问题的示例项目并发给我?
  • 您的回答实际上将我引向了正确的方向:在为我的每个视图都做了一段时间之后,我实际上只是将它们全部放回了自动布局,它又开始工作了。不知道是不是 Auto Layout 本身的问题?
猜你喜欢
  • 1970-01-01
  • 2016-06-18
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2012-08-02
  • 2016-09-14
相关资源
最近更新 更多