Pad*_*215 5 objective-c ios nslayoutconstraint
希望表格视图在纵向时从顶部向下显示300像素,在横向时从顶部向下显示约175像素.
我似乎无法弄清楚我需要的VFL逻辑.
Rob*_*Rob 10
像许多自动布局问题一样,是的,你可以做你所要求的,但它远非显而易见.如果我真的需要300pt或175pt,我也可能会想要调整旋转的顶部约束.
但是如果你想知道如何在不处理旋转事件的情况下做到这一点,你可以:
设置所需的最小上限为175;
设置较低优先级的首选上边距为300(在景观中不会满足); 和
不太明显的是,您还需要一个所需的最小高度(因此,在横向上,它将知道不满足较低优先级请求以使上边距300).
例如,您可以使用(显然将5的底部边距替换为对您有意义的任何内容,但相应地调整tableview的最小高度):
@"V:|-(>=175)-[tableView(>=120)]-5-|"
Run Code Online (Sandbox Code Playgroud)
结合:
@"V:|-(300@500)-[tableView]"
Run Code Online (Sandbox Code Playgroud)
(显然,你也会对水平轴有约束,但为了简洁起见,我省略了它们.)
不可否认,这也是非常缺乏吸引力的,必须精确地指定最小桌面高度,但我没有看到任何其他方式告诉autolayout在什么情况下它应该优雅地不满足300pt的可选顶部空间.
您也可以使用y = mx + b公式来完成此操作constraintWithItem.是的,我知道你问过如何使用Visual Format Language进行此操作,但如果使用constraintWithItem,则不必指定最小表高度,而是可以像这样设置上边距:
constraint = [NSLayoutConstraint constraintWithItem:self.tableView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.tableView.superview
attribute:NSLayoutAttributeBottom
multiplier:multiplier
constant:constant];
Run Code Online (Sandbox Code Playgroud)
显然,诀窍在于如何确定multiplier,constant以便你可以获得300 pt的纵向和175 pt的景观.做一个小代数,你会发现你可以按如下方式计算这些值:
CGFloat multiplier = (300.0 - 175.0) / (superviewPortraitHeight - superviewLandscapeHeight);
CGFloat constant = 175.0 - superviewLandscapeHeight * multiplier;
Run Code Online (Sandbox Code Playgroud)
(而且,我再次假设您将指定其他约束,以便不明确定义tableview,例如设置左,右和底部约束,这可以在Visual Format Language中完成.)
| 归档时间: |
|
| 查看次数: |
11965 次 |
| 最近记录: |