【问题标题】:How do I stop an NSView subview being resized with Auto Layout如何停止使用自动布局调整 NSView 子视图的大小
【发布时间】:2012-09-25 06:02:18
【问题描述】:

我在使用新的自动布局功能时遇到问题。 我添加了一个名为 tableView 的 NSView 作为 workingBox 的子视图。 workingBox 还包含一些其他使用 Interface Builder 添加的子视图

[self.window setFrame:frame display:YES animate:YES];
[workingBox addSubview:tableView];

我的问题是,如果任何其他子视图触摸 tableView,那么它们将在动画中调整大小。不在添加 tableView 的位置附近的子视图保持正确的大小。我已经尝试在正在调整大小的子视图上设置 NSViewNotSizable resizeMask 但它不起作用。唯一有效的是将子视图向上移动(到错误的位置。


编辑:我在代码中添加了一个约束:

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(divider);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[divider(==1)]"
                                                               options:0
                                                               metrics:nil
                                                                 views:viewsDictionary];
[workingBox addConstraints:constraints];  

这使 NSView 保持在 1px 高度,但如果我将其锁定在顶部,它会阻止超级视图增长

【问题讨论】:

标签: objective-c cocoa nsview autolayout


【解决方案1】:

我无法通过在代码中添加约束来完成这项工作。但是在 Interface Builder 中,我可以看到有问题的 NSView 存在一个名为“底部对齐”的约束。我在检查器中将其更改为 1 的优先级,它阻止了 NSView 在窗口展开时被拉伸。我认为我在上面的评论中提到的这种自动添加的约束一直是问题所在。

【讨论】:

  • 因为我的布局几乎是固定的,所以我最终决定放弃自动布局,因为它只会导致太多的复杂性。我回到了基础,以传统方式布置了所有内容,一切都很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
相关资源
最近更新 更多