我是新手NSLayoutConstraint
。
我想以NSScrollView
编程方式管理内容。最后,我想做的是创建一个NSScrollView
带有方法的子类,该方法- add:(NSView *)aView
将在其他方法之后添加并在必要时aView
扩大。documentView
NSScrollView
(所有这些都适用于 OSX)我猜它存在但找不到它,所以如果有人知道在哪里可以找到它,我就在;)这是一张可以帮助您理解的图片:
我的计划是使用NSLayoutConstraint
s. 约束将是:
view 1
,view 2
等之间的垂直间距相等documentView
高度应适应 , 等的高度view 1
之view 2
和。documentView
在andview 1
和 last之间有一些固定的垂直边距view
。view 1
,view 2
, 等是右对齐的
所以,让我们来回答我的问题:我从添加开始view 1
(我会在后面看到)。我做了以下事情:
theScrollView
是我的NSScrollView
;newSubview
是我要添加的视图;就图片而言,它是view 1
。theContainer = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)] ; [theScrollView setDocumentView:theContainer] ; [newSubview setTranslatesAutoresizingMaskIntoConstraints:NO]; [theContainer addSubview:newSubview] ; NSLog(@"superview ? %@", [newSubview superview]) ; NSLog(@"view ? %@", newSubview) ; NSLog(@"NSScrollView ? %@", self) ; NSLog(@"NSScrollView content ? %@", self.contentView) ; NSArray * arrayOfConst1 ; arrayOfConst1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-50-[newSubview]" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(newSubview)]; NSLog(@"First constraints : %@", arrayOfConst1) ; NSArray * arrayOfConst2 ; arrayOfConst2 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[newSubview]" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(newSubview)]; NSLog(@"Second constraints : %@", arrayOfConst2) ; [newSubview removeConstraints:[newSubview constraints]] ; [theContainer removeConstraints:[theContainer constraints]] ; [theContainer addConstraints:arrayOfConst1] ; [theContainer addConstraints:arrayOfConst2] ; NSLog(@"Frame of theContainer : %@", NSStringFromRect(theContainer.frame));
但是,它不起作用,框架theContainer
仍然存在(0,0,0,0)
。
我是新手NSLayoutConstraints
;我错过了什么?