gpt4 book ai didi

objective-c - 调整内部 View 添加/替换的窗口大小(OSX、Cocoa)?

转载 作者:行者123 更新时间:2023-12-03 17:21:51 25 4
gpt4 key购买 nike

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

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

这就是我的想法(在 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 还很陌生。

最佳答案

我想出了一些古怪的东西,目前还可以。

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

- (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];
}

关于objective-c - 调整内部 View 添加/替换的窗口大小(OSX、Cocoa)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23289040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com