在内部视图添加/替换(OSX,Cocoa)上调整窗口大小?

时间:2014-04-25 09:20:28

标签: objective-c cocoa window-resize

我有一个窗口,它是2个不同(大小)视图的占位符(在两者之间切换)。

我想在切换视图时调整窗口大小。

这就是我提出的(在replaceSubviewaddSubview之后立即调用):

- (void) resizeViews: (NSView*) customView{
  NSView* contentView = self.window.contentView;
  [customView setTranslatesAutoresizingMaskIntoConstraints:YES];

  NSDictionary *views = NSDictionaryOfVariableBindings(customView);

  [contentView addConstraints:
    [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[customView]|"
        options:0
        metrics:nil
        views:views]];

  [contentView addConstraints:
    [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[customView]|"
    options:0
    metrics:nil
}

这仅适用于水平调整大小,垂直窗口保持其初始大小(如IB中所设置)。

我已经清除了窗口中的所有限制,没有任何运气。

对不起,如果它显而易见 - 我对Cocoa很新。

1 个答案:

答案 0 :(得分:0)

我想出了一些hacky,现在就可以了。

如果有人能够提供更好的解决方案,请这样做(我不会在一段时间内将此标记为答案):

- (void) onAddedView: (NSView*) newView{
  NSView* parentView = self.window.contentView;
  NSRect parentFrame = [self.window frame];
  CGSize newSize = [newView frame].size;
  int titlebarHeight = 22; // TODO: how to get this automatically?

  // resize the window (and reposition it) to fit the added view
  newSize.height += titlebarHeight;
  parentFrame.origin.y += parentFrame.size.height; // remove the old height
  parentFrame.origin.y -= newSize.height; // add the new height
  parentFrame.size = newSize;

  // center the added view
  [newView setFrameOrigin:NSMakePoint(
    (NSWidth([parentView bounds]) - NSWidth([newView frame])) / 2,
    (NSHeight([parentView bounds]) - NSHeight([newView frame])) / 2
  )];
  [newView setAutoresizingMask:NSViewMinXMargin | NSViewMaxXMargin | NSViewMinYMargin | NSViewMaxYMargin];

  // render changed view
  [self.window setFrame: parentFrame display: YES animate: NO];
}