每次调整大小后,基于自动布局的可可分割视图都会恢复到原来的大小



为了演示我的问题,我用接口生成器创建了一个简单的测试应用程序,它是默认的窗口,带有默认的视图控制器(链接到XCode中的viewcontroller.m类),并且视图控制器(在接口生成器中)包含一个垂直拆分视图。然后,此拆分视图的右侧子视图链接到ViewController.h:ViewController界面中的"IBOutlet NSView*right;"。

最后,在ViewController.m中,我有以下代码:

+ (void)addConstraint:(NSLayoutAttribute)type relatedBy:(NSLayoutRelation)relation
superview:(NSView *)superview subview:(NSView *)subview
{
[superview addConstraint:[NSLayoutConstraint constraintWithItem:subview
attribute:type
relatedBy:relation
toItem:superview
attribute:type
multiplier:1
constant:0]];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
int numObjects = 3;
NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i = 0; i < numObjects; i++) {
NSTextField *label = [[NSTextField alloc] init];
[label setEditable:NO];
label.bezeled = NO;
label.editable = NO;
label.drawsBackground = NO;
[label setTranslatesAutoresizingMaskIntoConstraints:NO];
[label setAutoresizesSubviews:YES];
[label setStringValue:[NSString stringWithFormat:@"%d", i]];
[array addObject:label];
}
NSStackView *stackView = [NSStackView stackViewWithViews:array];
[stackView setTranslatesAutoresizingMaskIntoConstraints:NO];
[stackView setAutoresizesSubviews:YES];
stackView.orientation = NSUserInterfaceLayoutOrientationVertical;
[right addSubview:stackView];
[[self class] addConstraint:NSLayoutAttributeLeft   relatedBy:NSLayoutRelationEqual superview:right subview:stackView];
[[self class] addConstraint:NSLayoutAttributeRight  relatedBy:NSLayoutRelationEqual superview:right subview:stackView];
for (int i = 0; i < [array count]; i++) {
NSView *view = [array objectAtIndex:i];
[[self class] addConstraint:NSLayoutAttributeLeft   relatedBy:NSLayoutRelationEqual superview:stackView subview:view];
[[self class] addConstraint:NSLayoutAttributeRight  relatedBy:NSLayoutRelationEqual superview:stackView subview:view];
}
}

使用拆分视图的控制条调整大小是可行的,万岁!现在,问题是,一旦我将"int numObjects=3;"更改为大于3的任何数字(例如:"int numObjects=4;"),调整大小的行为就会中断。现在,如果我在左/右半部分之间拖动分割手柄,当鼠标按钮仍然向下时,它会适当地调整大小;然而,如果我放开鼠标按钮,拆分视图会恢复到原来的(预调整大小)配置,其中右半部分的大小尽可能小。

我做错了什么?

我最终通过谷歌fu找到了这一点:尝试找到正确的关键词来找到正确的stackoverflow解决方案。这篇文章解释了如何解决这个问题,主要是通过将拆分视图中右侧窗格的"持有优先级"从250更改为251。

最新更新