Xcode 每次调整大小后,基于Autolayout的cocoa拆分视图都会捕捉回原来的大小
为了演示我的问题,我使用interface builder创建了一个简单的测试应用程序,它是默认窗口,附带了默认的viewcontroller(链接到XCode中的viewcontroller.m类),并且viewcontroller(在interface builder中)包含一个垂直拆分视图。然后,此拆分视图的右侧子视图将链接到ViewController.h:ViewController界面中的“IBMOutlet视图*右侧;” 最后,在ViewController.m中,我有以下代码:Xcode 每次调整大小后,基于Autolayout的cocoa拆分视图都会捕捉回原来的大小,xcode,cocoa,interface-builder,autolayout,Xcode,Cocoa,Interface Builder,Autolayout,为了演示我的问题,我使用interface builder创建了一个简单的测试应用程序,它是默认窗口,附带了默认的viewcontroller(链接到XCode中的viewcontroller.m类),并且viewcontroller(在interface builder中)包含一个垂直拆分视图。然后,此拆分视图的右侧子视图将链接到ViewController.h:ViewController界面中的“IBMOutlet视图*右侧;” 最后,在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];
}
}
+(void)addConstraint:(NSLayoutAttribute)类型relatedBy:(NSLayoutRelation)关系
超级视图:(NSView*)超级视图子视图:(NSView*)子视图
{
[superview addConstraint:[NSLayoutConstraint constraintWithItem:子视图
属性:类型
关系人:关系
项目:超级视图
属性:类型
乘数:1
常数:0]];
}
-(无效)viewDidLoad{
[超级视图下载];
//加载视图后执行任何其他设置。
int numObjects=3;
NSMUTABLEARRY*array=[[NSMUTABLEARRY alloc]init];
for(int i=0;i
使用拆分视图的控制柄栏调整大小很有效,万岁!现在,问题是,只要我将“int-numObjects=3;”更改为大于3的任何数字(例如:“int-numObjects=4;”),大小调整行为就会中断。现在,如果我在左右两半之间拖动拆分控制柄,它会在鼠标按钮仍然按下时适当调整大小;但是,如果我松开鼠标按钮,分割视图将恢复到其旧的(预调整大小)配置,右半部分是最小的可能大小
我做错了什么?我最终通过google fu解决了这个问题:尝试找到正确的关键字,以找到正确的stackoverflow解决方案。post解释了如何解决这个问题,基本上是通过将拆分视图中右窗格的“保持优先级”从250更改为251。Hi Ronald。如果你自己解决了问题,你可以把自己的答案标记为正确。这将有助于其他路过的用户。