2

我正在使用 AutoLayout 将 NSWindow 调整为内容的固有大小。这在我第一次向 NSWindow 的 contentView 添加子视图然后添加诸如“H:|[view]|”之类的视觉约束时效果很好 和“V:|[视图]|”。

我后来删除了这个视图(removeFromSuperView)并向窗口添加了另一个视图,并为新添加的视图添加了新的约束。然而此时 NSWindow 并没有缩小以占用新视图的最小尺寸。相反,它会“扩展”新添加的视图以反映窗口的旧大小。

我已将 contentView 的内容拥抱优先级设置为 1000(水平和垂直),认为这可行,但没有任何效果。我还尝试在新添加的视图上调用 invalidateIntrinsicContentSize 以及在 NSWindow 上调用 updateConstraints 但没有任何效果。

4

1 回答 1

2

似乎以下工作。我设置了 0 高度和宽度 @ 550 优先级,它导致窗口以我想要的方式“拥抱”内容:

  [customView setAlphaValue:0];
  [customView setTranslatesAutoresizingMaskIntoConstraints:NO];
  [self.window.contentView customView];

  NSDictionary *views = NSDictionaryOfVariableBindings(customView);

  [self.window.contentView addConstraints:
   [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[customView(0@550)]|"
                                           options:0
                                           metrics:nil
                                             views:views]];

  [self.window.contentView addConstraints:
   [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[customView(0@550)]|"
                                           options:0
                                           metrics:nil
                                             views:views]];
于 2013-09-04T23:21:45.267 回答