【发布时间】:2011-12-30 16:54:43
【问题描述】:
我有一个带有单个自定义视图的窗口,我希望自定义视图随窗口一起调整大小,以便它随时完全填满它。 如果我写:
NSView *contentView = [self.window contentView];
CustomView *customView = [[CustomView alloc] initWithFrame:[contentView bounds]];
[contentView addSubview:customView];
[contentView addConstraint:
[NSLayoutConstraint constraintWithItem:customView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeWidth
multiplier:1
constant:0]];
[contentView addConstraint:
[NSLayoutConstraint constraintWithItem:customView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeHeight
multiplier:1
constant:0]];
然后窗口不允许我调整它的大小。
如果我添加:
[customView setTranslatesAutoresizingMaskIntoConstraints:NO];
然后自定义视图不会出现(drawRect: 似乎永远不会被调用)。
我尝试了不同的方法(包括视觉格式@"|[customview]|"),但我总是遇到同样的问题。我知道这可以用旧的自动调整大小系统来完成,用:
[customView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
但我想使用 Cocoa 自动布局系统,并且我想将它用于更复杂的情况(比如几个总是填满窗口的自定义视图)。
有谁知道出了什么问题以及我应该如何使用自动布局系统来获得我想要的结果?
【问题讨论】:
-
这可能有助于调试:
[[contentView constraints].window visualizeConstraints:contentView.constraints]; -
我已经针对您所描述的情况测试了三种使用自动布局的不同方式,并且所有三种方式都有效。你的代码中一定有其他东西阻止自动布局按预期工作。你能上传一个能重现你的问题的最小测试用例吗?
-
确实,它确实有效,但我找不到问题所在......我可能曾在将视图添加到超级视图之前应用了约束(但这确实会在控制台上输出错误我还没有看到它)。或者也许还有其他问题,通过提出问题,它让我从头开始重写所有内容,而没有最初的问题......