Cocoa NSTableHeaderView阻止自动布局在拆分视图中调整滚动视图的大小
问题:为什么标题视图会阻止自动布局调整滚动视图的大小 我正在尝试将自定义视图嵌入到滚动视图中,滚动视图又包含在拆分视图中。我在Xcode 4.5 DP 4中使用Interface Builder创建了以下视图层次结构,但在Xcode 4.4中似乎也出现了同样的问题Cocoa NSTableHeaderView阻止自动布局在拆分视图中调整滚动视图的大小,cocoa,interface-builder,nssplitview,autolayout,Cocoa,Interface Builder,Nssplitview,Autolayout,问题:为什么标题视图会阻止自动布局调整滚动视图的大小 我正在尝试将自定义视图嵌入到滚动视图中,滚动视图又包含在拆分视图中。我在Xcode 4.5 DP 4中使用Interface Builder创建了以下视图层次结构,但在Xcode 4.4中似乎也出现了同样的问题 NSWindow NSView (content view of the window) NSSplitView NSView (split view panel) NSView (split vi
NSWindow
NSView (content view of the window)
NSSplitView
NSView (split view panel)
NSView (split view panel)
NSScrollView
TestView (my custom view)
现在,如果TestView提供了一个NSTableHeaderView(via-headerView)属性,则拆分视图分隔符不能一直拖到底(或右)以隐藏TestView,而是停在TestView初始宽度或高度的边界上。如果-headerView属性返回nil,则可以自由拖动分隔符
只要创建一个新的Cocoa应用程序项目,添加视图并运行该项目,每次都可以复制它。步骤如下:
@implementation TestView {
NSTableHeaderView *_header;
}
- (NSTableHeaderView *)headerView
{
if (!_header) {
_header = [[NSTableHeaderView alloc]
initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 17.0)];
}
return _header;
}
@end
任何指针,我应该如何使分割视图分割器再次移动?在一个方便的类中实现此NSSplitViewProtocol方法:
- (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)subview {return TRUE;}
确保将拆分视图的委托输出连接到类对象
拆分视图现在可以调整为任何大小。我的解决方案是手动删除表头的自动调整大小约束:
NSTableHeaderView *headerView = outlineView.headerView;
NSView *headerViewSuperview = headerView.superview;
[headerViewSuperview removeFromSuperview];
headerView.superview.translatesAutoresizingMaskIntoConstraints = NO;
[scrollView addSubview:headerViewSuperview];
我也有同样的问题。我无法发现布局检查器到底发生了什么。似乎弹簧和支柱的布局被错误地翻译成了一个约束,使得桌子的高度不会缩小。我确实向苹果公司提交了一个关于这个问题的bug。如果发生任何情况,我们将看看会发生什么。NSTableView也存在同样的问题,如果我关闭表头,我可以正确调整大小。Apple尚未对我的雷达报告发表评论或做出响应。这对我来说非常有效,感谢您花时间发布它。