Cocoa NSTableHeaderView阻止自动布局在拆分视图中调整滚动视图的大小

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

问题:为什么标题视图会阻止自动布局调整滚动视图的大小

我正在尝试将自定义视图嵌入到滚动视图中,滚动视图又包含在拆分视图中。我在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(via-headerView)属性,则拆分视图分隔符不能一直拖到底(或右)以隐藏TestView,而是停在TestView初始宽度或高度的边界上。如果-headerView属性返回nil,则可以自由拖动分隔符

只要创建一个新的Cocoa应用程序项目,添加视图并运行该项目,每次都可以复制它。步骤如下:

  • 创建新的Cocoa应用程序项目
  • 使用headerView属性创建TestView类,该属性返回NSTableHeaderView实例
  • 编辑MainMenu.xib并添加拆分视图
  • 添加自定义视图并使其成为TestView
  • 选择编辑器->嵌入->滚动视图
  • 运行项目
  • (未触及约束或其他界面生成器菜单)

    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
    

    任何指针,我应该如何使分割视图分割器再次移动?

    在一个方便的类中实现此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尚未对我的雷达报告发表评论或做出响应。这对我来说非常有效,感谢您花时间发布它。