1

我是新手NSLayoutConstraint

我想以NSScrollView编程方式管理内容。最后,我想做的是创建一个NSScrollView带有方法的子类,该方法- add:(NSView *)aView将在其他方法之后添加并在必要时aView扩大。documentViewNSScrollView

(所有这些都适用于 OSX)我猜它存在但找不到它,所以如果有人知道在哪里可以找到它,我就在;)这是一张可以帮助您理解的图片: 在此处输入图像描述

我的计划是使用NSLayoutConstraints. 约束将是:

  • view 1,view 2等之间的垂直间距相等
  • documentView高度应适应 , 等的高度view 1view 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;我错过了什么?

4

0 回答 0