3

问题:为什么有一个标题视图会阻止滚动视图被自动布局调整大小?

我正在尝试将我的自定义视图嵌入到滚动视图中,而滚动视图又包含在拆分视图中。我在 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 应用程序项目,添加视图并运行项目即可。步骤:

  1. 创建一个新的 Cocoa 应用程序项目
  2. 使用返回 NSTableHeaderView 实例的 headerView 属性创建 TestView 类。
  3. 编辑 MainMenu.xib 并添加拆分视图
  4. 添加自定义视图并使其成为 TestView
  5. 选择编辑器 -> 嵌入 -> 滚动视图
  6. 运行项目

(没有约束或其他界面生成器菜单)

测试视图.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

任何指针,我应该怎么做才能让拆分视图分隔线再次移动?

4

2 回答 2

1

在一个方便的类中实现这个 NSSplitViewProtocol 方法:

- (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)subview {return TRUE;}

确保将拆分视图的委托输出连接到类对象。

现在可以将拆分视图调整为任何大小。

于 2012-10-14T07:27:27.143 回答
1

我的解决方案是手动删除表头的自动调整大小约束:

NSTableHeaderView *headerView = outlineView.headerView;
NSView *headerViewSuperview = headerView.superview;
[headerViewSuperview removeFromSuperview];
headerView.superview.translatesAutoresizingMaskIntoConstraints = NO;
[scrollView addSubview:headerViewSuperview];
于 2013-01-15T07:53:26.577 回答