【发布时间】:2014-10-06 21:16:12
【问题描述】:
我一直试图弄清楚如何使用NSLayoutConstraint 的constraintWithItem 方法创建一个NSLayoutConstraint 对象,该方法等效于下面的代码。
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:"@H:|-10-[view]"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(view)];
NSLayoutConstraint *rightMarginConstraint = [constraints firstObject];
我尝试过如下代码:
NSLayoutConstraint* rightMarginConstraints = [NSLayoutConstraint constraintWithItem:view
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:superview
attribute:NSLayoutAttributeLeft
multiplier:1.0f
constant:10.0f];
但它做的事情并不完全相同,打印出来时在控制台上也有所不同。我想要一个在控制台上打印为"H:|-10-[view]" 的约束。
有谁知道如何创建一个同时适用于 iOS7 和 8 的系统? (我发现iOS 8有新的属性选项,但我仍然支持iOS 7)
提前致谢!
///////// 编辑 ////////
实际上,第二个代码块对简单视图和超级视图产生了完全相同的约束。 但是,我在 TableViewCells 上遇到了问题,结果如下:
这就是我想要的,并使用类似于第一块代码的代码生成
<NSLayoutConstraint:0x7fc050f481c0 H:|-(10)-[UIView:0x7fc050f48070] (Names: '|':UITableViewCellContentView:0x7fc050f39310 )>
第二个代码块产生类似于下面输出的约束
<NSLayoutConstraint:0x7b6513d0 view:0x7b64cdf0.leading == UITableViewCellContentView:0x7b64cd10.left>
///编辑 2/// 即使我使用了匹配的属性,我也会得到类似于下面代码的输出。
<NSLayoutConstraint:0x7d695c70 CustomBorderView:0x7d4cb0f0.right == UITableViewCellContentView:0x7d4cb010.right + 10>
///编辑 3///
我认为物品的顺序很重要。我交换了 constraintWithItem: 和 toItem: 的参数,现在输出我想要的。谢谢!
【问题讨论】:
-
它有什么作用,它在控制台上打印什么?
-
向我们展示两者的打印日志。
标签: ios cocoa-touch autolayout nslayoutconstraint