我有可可自动布局的一些问题。 我有一个窗口,我想补充(编程)一个NSTableView
(其NSScrollView
)。 到现在为止一切正常。 我可以调整我的窗口和表正确调整大小。 这是我使用的代码。
MyListViewController *viewController = [[MyListViewController alloc] initWithNibName:@"ListView" bundle:nil];
[self.mainContentView addSubview:viewController.view];
[viewController.view setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.mainContentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[insertedView]|"
options:0
metrics:nil
views:@{@"insertedView" :viewController.view}]];
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[insertedView]|"
options:0
metrics:nil
views:@{@"insertedView" :viewController.view}];
[self.mainContentView addConstraints:verticalConstraints];
现在..我想在运行时添加(和删除)被放置在表的顶部另一种观点。 视图是一个NSPredicateEditor
其NSScrollView
。 需要明确的是:我试图实现取景器相同的行为,当你键入搜索领域的东西,并与可能的搜索选项出现在主窗口中的视图。
我用这种方式处理这个问题:
AdvancedFilterViewController *viewController = [[AdvancedFilterViewController alloc] initWithNibName:@"AdvancedFilterView" bundle:nil];
[self.mainContentView addSubview:viewController.view];
[viewController.view setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.mainContentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[insertedView]|"
options:0
metrics:nil
views:@{@"insertedView" :viewController.view}]];
[self.mainContentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[insertedView(<=225)][prevView]|" // >= size of one row, <= size of 8 + 1 rows
options:0
metrics:nil
views:@{@"insertedView" :viewController.view, @"prevView" : self.listView.view}]];
我想谓词(25分)是可见的,至少一条线。 当用户按下加号按钮,然后更多的意见开始出现(和滚动视图应该调整其大小)。 某些行(我决定9)后,滚动条应该开始出现,并在窗口中的主视图应停止萎缩。
的问题是,当我插入过滤视图,它几乎是零大小(如1点)。 或者,如果我加25分的最小尺寸,视图是可见的,但添加行仅仅增加了滚动型的'内部尺寸',所以会出现滚动条(但滚动视图不长,不会使列表视图收缩) 。
我希望我正确地说明了问题。
编辑:
以灵感来自我实现委托了答案:
- (void)ruleEditorRowsDidChange:(NSNotification *)notification
{
//handle resizing of the view
[self.predicateEditorHeight setConstant:[self.predicateEditor numberOfRows] * self.predicateEditor.rowHeight];
}
其中self.predicateEditorHeight
是一个IBOutlet
对高度的限制NSScrollView
。 然后在封闭NSWindowController
,当我添加谓词编辑观点我也上的比例添加约束NSTableView
关于谓语视图。 通过这种方式(因为我将其设置为0.3)滚动视图可以增长,直到某一点,然后,在这之后,它必须使用它的滚动条。
我仍然有一些问题的约束:例如,当我在编辑器中添加过多的行,我得到
2014-04-26 09:38:27.769 MyApp[2531:303] Unable to simultaneously satisfy constraints:
(
"<NSLayoutConstraint:0x60000029dc40 V:[NSView:0x60000013fb80]-(0)-| (Names: '|':NSView:0x60000013e500 )>",
"<NSLayoutConstraint:0x60000029dbf0 V:[NSView:0x600000320b40]-(0)-[NSView:0x60000013fb80]>",
"<NSLayoutConstraint:0x60000029dc90 NSView:0x60000013fb80.height >= 0.3*NSView:0x600000320b40.height>",
"<NSAutoresizingMaskLayoutConstraint:0x608000288b60 h=--& v=--& V:[NSView:0x60000013e500(360)]>",
"<NSLayoutConstraint:0x60000029dba0 V:|-(0)-[NSView:0x600000320b40] (Names: '|':NSView:0x60000013e500 )>",
"<NSLayoutConstraint:0x60000029d1a0 V:[NSView:0x600000320f00(275)]>",
"<NSLayoutConstraint:0x60000029d420 V:[NSView:0x600000320f00]-(0)-| (Names: '|':NSView:0x600000320b40 )>",
"<NSLayoutConstraint:0x60000029d510 V:[NSView:0x600000320dc0]-(0)-[NSView:0x600000320f00]>",
"<NSLayoutConstraint:0x60000029d330 V:|-(0)-[NSView:0x600000320dc0] (Names: '|':NSView:0x600000320b40 )>",
"<NSLayoutConstraint:0x60000029d060 V:[NSButton:0x6000001569a0'Search']-(4)-| (Names: '|':NSView:0x600000320dc0 )>",
"<NSLayoutConstraint:0x60000029d0b0 V:|-(5)-[NSButton:0x6000001569a0'Search'] (Names: '|':NSView:0x600000320dc0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x60000029d060 V:[NSButton:0x6000001569a0'Search']-(4)-| (Names: '|':NSView:0x600000320dc0 )>
2014-04-26 09:38:27.770 MyApp[2531:303] Unable to simultaneously satisfy constraints:
(
"<NSLayoutConstraint:0x60000029dc40 V:[NSView:0x60000013fb80]-(0)-| (Names: '|':NSView:0x60000013e500 )>",
"<NSLayoutConstraint:0x60000029dbf0 V:[NSView:0x600000320b40]-(0)-[NSView:0x60000013fb80]>",
"<NSLayoutConstraint:0x60000029dc90 NSView:0x60000013fb80.height >= 0.3*NSView:0x600000320b40.height>",
"<NSAutoresizingMaskLayoutConstraint:0x608000288b60 h=--& v=--& V:[NSView:0x60000013e500(360)]>",
"<NSLayoutConstraint:0x60000029dba0 V:|-(0)-[NSView:0x600000320b40] (Names: '|':NSView:0x60000013e500 )>",
"<NSLayoutConstraint:0x60000029d1a0 V:[NSView:0x600000320f00(275)]>",
"<NSLayoutConstraint:0x60000029d420 V:[NSView:0x600000320f00]-(0)-| (Names: '|':NSView:0x600000320b40 )>",
"<NSLayoutConstraint:0x60000029d510 V:[NSView:0x600000320dc0]-(0)-[NSView:0x600000320f00]>",
"<NSLayoutConstraint:0x60000029d330 V:|-(0)-[NSView:0x600000320dc0] (Names: '|':NSView:0x600000320b40 )>",
"<NSLayoutConstraint:0x60000029d100 V:|-(4)-[NSButton:0x6000001564d0] (Names: '|':NSView:0x600000320dc0 )>",
"<NSLayoutConstraint:0x60000029d150 V:[NSButton:0x6000001564d0]-(5)-| (Names: '|':NSView:0x600000320dc0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x60000029d150 V:[NSButton:0x6000001564d0]-(5)-| (Names: '|':NSView:0x600000320dc0 )>
2014-04-26 09:38:27.775 MyApp[2531:303] Unable to simultaneously satisfy constraints:
(
"<NSLayoutConstraint:0x60000029cf70 V:[NSTextField:0x600000198940]-(4)-| (Names: '|':NSView:0x600000320dc0 )>",
"<NSLayoutConstraint:0x60000029cfc0 V:|-(4)-[NSTextField:0x600000198940] (Names: '|':NSView:0x600000320dc0 )>",
"<NSLayoutConstraint:0x60000029dc40 V:[NSView:0x60000013fb80]-(0)-| (Names: '|':NSView:0x60000013e500 )>",
"<NSLayoutConstraint:0x60000029dbf0 V:[NSView:0x600000320b40]-(0)-[NSView:0x60000013fb80]>",
"<NSLayoutConstraint:0x60000029dc90 NSView:0x60000013fb80.height >= 0.3*NSView:0x600000320b40.height>",
"<NSAutoresizingMaskLayoutConstraint:0x608000288b60 h=--& v=--& V:[NSView:0x60000013e500(360)]>",
"<NSLayoutConstraint:0x60000029dba0 V:|-(0)-[NSView:0x600000320b40] (Names: '|':NSView:0x60000013e500 )>",
"<NSLayoutConstraint:0x60000029d1a0 V:[NSView:0x600000320f00(275)]>",
"<NSLayoutConstraint:0x60000029d420 V:[NSView:0x600000320f00]-(0)-| (Names: '|':NSView:0x600000320b40 )>",
"<NSLayoutConstraint:0x60000029d510 V:[NSView:0x600000320dc0]-(0)-[NSView:0x600000320f00]>",
"<NSLayoutConstraint:0x60000029d330 V:|-(0)-[NSView:0x600000320dc0] (Names: '|':NSView:0x600000320b40 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x60000029cf70 V:[NSTextField:0x600000198940]-(4)-| (Names: '|':NSView:0x600000320dc0 )>