我有一个窗口,它是2个不同(大小)视图的占位符(在两者之间切换)。
我想在切换视图时调整窗口大小。
这就是我提出的(在replaceSubview
或addSubview
之后立即调用):
- (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很新。
答案 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];
}