我想要一个iPad布局,它有两个面板并排,以填充屏幕的宽度,两者都和屏幕一样高。我的尝试导致如下
self.view addConstraints:
@"|[_sidePanel(300)]-1.0-[_mainPanel]|"
@"V:|[_sidePanel]|"
@"V:|[_mainPanel]|"
在__sidePanel_里面我试图在子视图上创建更多约束。
注意_sidePanel视图是UIScrollView。
我想在侧面板中将2个视图叠加在一起。
所以我将以下约束添加到_sidePanel _。
_sidePanelView addConstraints:
@"|[_top(300)]|"
@"|[_bottom(300)]|"
@"V:|[_top]-5.0-[_bottom]|"
似乎我需要为这两个视图指定宽度以避免歧义。
但我希望底部视图填充__sidePanel_的剩余空间。
如果我只将__bottom_固定到__top_的底部(根据其内容在某个点获得定义的高度)并将其__sidePanel_的底部固定,__ sidePanel_和__bottom_都是不明确的;这是有道理的我猜,因为约束非常相似(并且通过将__bottom_的约束添加到__sidePanel_视图而不是最顶层的self.view而无法避免)。
如果我硬编码__bottom_的高度,我解决了歧义,但我不想要一个定义的高度;我希望它填充__sidePanel_中的剩余空间。
关于我可以尝试解决歧义但仍能实现我所追求的目标的任何建议?
答案 0 :(得分:3)
你需要为顶部或底部指定一个高度 - 它听起来像top在某个点获得一个定义的高度,但是你需要为它设置一个定义的高度最初,你可以改变它后来。
此外,无需为顶部或底部指定宽度(300),因为您已将它们固定到sidePanel的侧面,侧面板本身具有已定义的宽度。所以这些约束工作正常,没有歧义:
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_sidePanel(300)]-1.0-[_mainPanel]|" options:0 metrics:nil views:viewsDict]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_sidePanel]|" options:0 metrics:nil views:viewsDict]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_mainPanel]|" options:0 metrics:nil views:viewsDict]];
[_sidePanelView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_top]|" options:0 metrics:nil views:viewsDict]];
[_sidePanelView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_bottom]|" options:0 metrics:nil views:viewsDict]];
[_sidePanelView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_top]-5.0-[_bottom]|" options:0 metrics:nil views:viewsDict]];
self.topHeightCon = [NSLayoutConstraint constraintWithItem:self.top attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:300];
[self.top addConstraint:self.topHeightCon];
稍后,当您计算top的实际高度时,可以使用self.topHeightCon.constant =(某个值)来调整其高度。
答案 1 :(得分:1)
在我的情况下,它归结为我试图让子视图限制其边界的视图是UIScrollView,这没有发生。我从那以后把它变成了UIView,并且我的约束工作了。你有它。