我是NSLayoutConstraint
的新手。
我想以编程方式管理NSScrollView
的内容。最后,我想要做的是创建一个NSScrollView
的子类,其方法- add:(NSView *)aView
将aView
添加到其他人之后,并放大documentView
{ {1}}如有必要。
(所有这些对于OSX)我猜它存在但找不到它,所以如果有人知道在哪里找到它,我就在;)这是一张可以帮助你理解的图片:
我这样做的计划是使用NSScrollView
。约束将是:
NSLayoutConstraint
,view 1
等view 2
高度应适应documentView
,view 1
等高度的总和。view 2
和documentView
以及最后view 1
之间的一些固定垂直边距。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)
的新手;我错过了什么?