这是我的loadVIEw:
- (voID)loadVIEw{ NSVIEw *vIEw = [[NSVIEw alloc] init]; NSScrollVIEw *tableScroll = [[NSScrollVIEw alloc] init]; NStableVIEw *filetable = [[NStableVIEw alloc] init]; [tableScroll setdocumentVIEw:filetable]; [tableScroll setHasverticalScroller:YES]; [tableScroll setHasHorizontalScroller:NO]; filetable.delegate = self; filetable.dataSource = self; [filetable setheaderVIEw:nil]; [filetable setAllowsColumnReordering:NO]; NStableColumn *column = [[NStableColumn alloc] initWithIDentifIEr:@"column1"]; [filetable addtableColumn:column]; [tableScroll setTranslatesautoresizingMaskIntoConstraints:NO]; [filetable setTranslatesautoresizingMaskIntoConstraints:NO]; [vIEw addSubvIEw:tableScroll]; NSDictionary *topVIEws = NSDictionaryOfVariableBindings(tableScroll); [vIEw addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[tableScroll]|" options:0 metrics:nil vIEws:topVIEws]]; [vIEw addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[tableScroll]|" options:0 metrics:nil vIEws:topVIEws]]; self.filetable = filetable; self.vIEw = vIEw;}
会发生什么是我的表视图的框架将始终等于NSClipVIEw的边界.视图位于窗口内部并随之调整大小,当我这样做时,它将调整滚动视图,剪辑视图和表格的大小,但我永远无法在任何地方滚动.
查看我得到的约束,NSScrollVIEw获取设置剪辑视图以填充它的约束,剪辑视图根本没有约束,并且表视图有一堆与其中的NStableRowVIEws相关的约束.
如果我向剪辑视图添加像| [filetable(> = 500)]这样的约束,我将获得500像素的NStableVIEw,但显然我不想这样做.
解决方法 尽管上面的评论中的海报回答了这个问题,但我认为我已经把答案放在了这里(遇到了同样的问题).如果您采用自动布局,通常会取消选中xib中的“将蒙版转换为约束”.但是,对于像NSScrollVIEw和NStableVIEw这样的类,通常应该让他们通过将translatesautoresizingMaskIntoConstraints属性设置为YES来管理自己的内部视图.设置这些视图外部的约束仍然可以,即相对于其超级视图调整大小.如果将translatesautoresizingMaskIntoConstraints设置为NO,那么您将需要为所有内部视图提供约束,除非您特别需要自定义行为(几乎从不),否则您将不希望这样做.这是上面的具体问题.
没有正确设置的一个明显的副作用是,表(例如)将无法正确滚动超出视图中可见的内容.
总结以上是内存溢出为你收集整理的macos – 使用自动布局的NSClipView / NSScrollView内的NSTableView框架全部内容,希望文章能够帮你解决macos – 使用自动布局的NSClipView / NSScrollView内的NSTableView框架所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)