【发布时间】:2014-07-06 14:13:27
【问题描述】:
在 Interface Builder 中,我添加了一个 NSScrollView 和一个 NSImageView、一些标签、一个水平分隔符和一个 NSView。 NSScrollView 如下所示:
每个元素都有左上角的约束,分隔符和自定义视图也有右上的约束。
有时我需要更改自定义视图的内容。我使用以下代码执行此操作(options 是自定义视图,view 是我要显示的视图):
[view setTranslatesAutoresizingMaskIntoConstraints:NO];
options.subviews = [NSArray arrayWithObject:view];
// Fix the constraints.
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(view);
[options addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:viewsDictionary]];
[options addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:viewsDictionary]];
这在一定程度上是可行的:正确的内容显示在视图中,内容的宽度根据约束改变。但是options 视图的高度并没有改变,所以view 视图的某些内容没有显示出来。我试图通过手动设置框架来改变这一点,但这不起作用。另外,我尝试了以下设置约束:
[options addConstraint:[NSLayoutConstraint constraintWithItem:options attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeHeight multiplier:1 constant:0]];
但没有任何效果。有谁知道我该如何解决这个问题?
我注意到的第二个问题是,即使NSScrollView 的内容大于NSScrollView 本身,滚动也不起作用。不显示滚动条。我该如何解决?
我仍然无法解决这些更难的约束问题...
【问题讨论】:
-
看起来您的视图有不明确的约束,尝试为宽度和高度设置“默认”值以解决不明确性并使用优先级 (
@) 来定义调整大小容差。 -
@JanCássio:“默认”值是什么意思?固定宽度和高度?还是宽度和高度限制?我都试过了,但都不管用......而且,我玩过宽容,但这也不起作用。如果我还在 NSScrollView 上设置约束,就会发生奇怪的事情:NSScrollView 的宽度会根据自定义视图的内容而变化。我做错了什么?
标签: objective-c cocoa autolayout nsview nsscrollview