gpt4 book ai didi

objective-c - 用另一个 View 替换 View 时保持约束

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

在我的应用程序中,我有:

  • 主窗口,包含一个“自定义 View ”,它是一个 NSView掉进了IB。
  • 一个 View Controller +另一个 Nib ,包含一个 View 和一些控制。

当应用程序加载时,我正在使用:

initWithNibName:nibName andReplaceView:(自定义 View ) resize:YES

替换自定义 View 。我知道 IB 中的 View 有一个选项 placeholder,但我不知道如何使用它,并且我的应用程序以这种方式运行良好.........只不过加载的 View 不会继承替换 View 的布局约束。

我该如何解决这个问题?

编辑:抱歉,我忘了这个函数是我的...我很久以前在一个类别中写过它。这是代码:

- (id)initWithNibName:(NSString*)nibName andReplaceView:(NSView*)aView resize:(BOOL)resize
{
// 1. Loading the bundle
if (self = [self initWithNibName:nibName bundle:nil])
{
[self replaceView:aView resize:resize];
}

return self;
}

- (void)replaceView:(NSView*)aView resize:(BOOL)resize
{
if (resize)
{
NSRect insertionFrame = [aView frame];
[[self view] setFrame:insertionFrame];
}
else
{
NSRect insertionFrame = [aView frame];
insertionFrame.size.width = [[self view] frame].size.width;
insertionFrame.size.height = [[self view] frame].size.height;

[[self view] setFrame:insertionFrame];
}

NSView* supView = [aView superview];
[supView replaceSubview:aView with:[self view]];
}

最佳答案

当您替换 View 时,它会删除附加到旧 View 的所有布局约束。

就我个人而言,我只是将新 View 放在旧 View 中。这是我使用过的一些代码:

@implementation SJPlaceholderView

-(void) fillWithView:(NSView*)view {
NSParameterAssert(view);

view.frame = self.bounds;
[view setTranslatesAutoresizingMaskIntoConstraints:NO];

[self addSubview:view];

[self addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(view)]];

[self addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(view)]];
}

@end

这可以确保内部 View 框架与外部 View 框架完全匹配。外部 View 上的所有布局约束仍然有效。

您还可以尝试循环旧 View 的所有约束,并将它们应用到新 View 。大多数约束将在 View 本身或 super View 上,但理论上它们可以在任何祖先 View 上。

关于objective-c - 用另一个 View 替换 View 时保持约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25639220/

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