我有一个iOS 9&amp; 10个应用程序,有一个小托盘&#34; UIView沿着窗口底部滑入和滑出以显示(或隐藏)某些控件。默认情况下,托盘已完全显示(&#34;滑出&#34;),以便用户可以看到所有内容。最右边有一个按钮,他们可以点按这个按钮使托盘滑入&#34;向左,使托盘大部分隐藏,因为它现在离屏幕左侧。 (最右边的20个点是&#34;拇指&#34;用户可以点击滑入/滑出,因此当托盘滑入时,拇指是托盘中唯一可见的部分。)< / p>
我想这样做的方法是通过Interface Builder定义两个不同的约束,我只需切换它们,这样一次只有一个是活动的。例如,两个约束可能是:
trayOutConstraint:
trayView.leading =(superview.leading * 1)+ 0 // result == 0
trayInConstraint:
trayView.leading =(superview.trailing * -1)+ 20 // result == -300(例如)
事实证明,我可以通过编程方式为trayInConstraint创建约束(编辑:展开以显示我如何禁用故事板的默认约束并添加新约束 ):
// Disable the default constraint (in the storyboard)
[[self trayTripOutLeadingConstraint] setActive:NO];
// Create the new constraint (add to an array by itself)
NSLayoutConstraint *newConstraint = [NSLayoutConstraint constraintWithItem:(id)trayView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:(id)[trayView superview] attribute:NSLayoutAttributeTrailing multiplier:-1 constant:20];
NSArray *newTrayConstraintsArray = [[NSArray alloc] initWithObjects:newConstraint, nil];
// Remove any existing constraints array and use the new one
[[self view] removeConstraints:[self tripTrayConstraints]];
[self setTripTrayConstraints:newTrayConstraintsArray];
[[self view] addConstraints:newTrayConstraintsArray];
但是如果我尝试在Interface Builder中创建它,我就不能将乘数设置为1.0以外的任何值。 (键入任何其他值只会强制它重置为&#34; 1&#34;。)
您不能使用非同一性乘数(1.0以外的值) 位置属性。
但为什么我可以在代码中创建它而不是IB?
(不相关可能对其他人有用:我也想创建一个约束,其中倍数为0但不能以编程方式或在IB中执行。我发现我可以解决无法使用的问题&#34; 0.0&#34;作为乘数而是使用非常小的东西,例如0.000001。)
答案 0 :(得分:3)
选择"Reverse First And Second Item"
并重新输入乘数的绝对值=&gt;这种方式(通过切换第一项和第二项)乘数的行为就像是负数。
第一项:View.Leading
第二项:Superview.Trailing
第一项:Superview.Trailing
第二项:View.Leading
答案 1 :(得分:0)
您可以为leading, trailing, top and bottom constraints simply
指定负值。但是,无法从代码或“接口”构建器中为任何乘数分配负值。如果您在代码中添加任何负值作为乘数,编译器将其视为+1,您可能会得到意外结果。 (在您的情况下,您可能会意外得到预期的结果)