我有一个超级视图,我添加了两个子视图(subview1 和 subview2)。
我希望 subview1 与 superview 具有相同的宽度并使用 superview 进行拉伸,并且还具有 30px 的高度并与 superview 的顶部对齐。我可以使用以下代码:
NSDictionary *metrics = @{@"height":[NSNumber numberWithFloat:30.0f]};
NSDictionary *views = NSDictionaryOfVariableBindings(subview1);
NSArray *tabContainerConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[subview1(==height)]" options:NSLayoutFormatAlignAllTop metrics:metrics views:views];
[superview addConstraints:tabContainerConstraints];
metrics = nil;
tabContainerConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[subview1]|" options:(NSLayoutFormatAlignAllLeading | NSLayoutFormatAlignAllTrailing) metrics:metrics views:views];
[superview addConstraints:tabContainerConstraints];
然后我希望 subview2 也具有与 superview 相同的宽度并使用 superview 拉伸,并且我希望 subview2 将其顶部与 subview1 的底部对齐,然后我希望 subview2 填充 superview 的所有剩余高度(对齐底部到底部)并拉伸高度与superview。我尝试使用以下代码执行此操作:
NSDictionary *metrics = nil;
NSDictionary *views = NSDictionaryOfVariableBindings(subview2);
NSArray *tabContainerConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[subview2]|" options:(NSLayoutFormatAlignAllLeading | NSLayoutFormatAlignAllTrailing) metrics:metrics views:views];
[superview addConstraints:tabContainerConstraints];
views = NSDictionaryOfVariableBindings(subview1, subview2);
tabContainerConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[subview1][subview2]-0-|" options:0 metrics:metrics views:views];
[superview addConstraints:tabContainerConstraints];
但是奇怪的事情发生了......子视图始终与其顶部对齐到 subview1 的底部,并且还具有超级视图的完整宽度,所以这很好。但是高度很奇怪......当第一次绘制/显示的 subview2 的高度非常有限时,似乎在 20-30 像素之间,但我可以通过切换到另一个选项卡/视图并返回来强制重绘,然后将其全部绘制/正确的高度。我的 subview2 是一个 NSTextView,当我输入文本时发生奇怪的事情,我的 subview2 突然没有占据所有高度并且不再与 superview 的底部对齐。
我希望我的解释是好的,如果不是,请提出任何问题。有想法该怎么解决这个吗?我以为 |-0-[视图]-0-| 会成功吗?
谢谢索伦_