问题:为什么有标题视图会阻止滚动视图通过自动布局调整大小?
我正在尝试将自定义视图嵌入到滚动视图中,而滚动视图又包含在拆分视图中。我在Xcode 4.5 DP 4中使用Interface Builder创建了以下视图层次结构,但Xcode 4.4中也出现了同样的问题。
NSWindow
NSView (content view of the window)
NSSplitView
NSView (split view panel)
NSView (split view panel)
NSScrollView
TestView (my custom view)
现在,如果TestView提供了NSTableHeaderView(通过-headerView)属性,则拆分视图分隔符不能一直拖动到底部(或右侧)以隐藏TestView但停止到TestView的初始宽度或高度的边界。如果-headerView属性返回nil,则可以自由拖动分隔符。
每次都可以重现,只需创建一个新的Cocoa应用程序项目,添加视图并运行项目。步骤:
(未触及约束或其他Interface Builder菜单)
TestView.m:
@implementation TestView {
NSTableHeaderView *_header;
}
- (NSTableHeaderView *)headerView
{
if (!_header) {
_header = [[NSTableHeaderView alloc]
initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 17.0)];
}
return _header;
}
@end
任何指针,我该怎么做才能让拆分视图分割器再次移动?
答案 0 :(得分:1)
在方便的类中实现此NSSplitViewProtocol方法:
- (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)subview {return TRUE;}
确保将拆分视图的委托输出连接到类对象。
现在可以将拆分视图调整为任何大小。
答案 1 :(得分:1)
我的解决方案是手动删除表头的自动调整约束:
NSTableHeaderView *headerView = outlineView.headerView;
NSView *headerViewSuperview = headerView.superview;
[headerViewSuperview removeFromSuperview];
headerView.superview.translatesAutoresizingMaskIntoConstraints = NO;
[scrollView addSubview:headerViewSuperview];