如何在代码中创建与 @"H:|-10-[view]" 完全相同的 NSLayoutConstraint 对象?
Posted
技术标签:
【中文标题】如何在代码中创建与 @"H:|-10-[view]" 完全相同的 NSLayoutConstraint 对象?【英文标题】:How can I create NSLayoutConstraint object that is exactly same as @"H:|-10-[view]" in code? 【发布时间】: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: 的参数,现在输出我想要的。谢谢!
【问题讨论】:
它有什么作用,它在控制台上打印什么? 向我们展示两者的打印日志。 【参考方案1】:NSLayoutAttributeLeft
与 NSLayoutAttributeLeading
不同。试试这个:
NSLayoutConstraint* rightMarginConstraints = [NSLayoutConstraint
constraintWithItem:view attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:superview attribute:NSLayoutAttributeLeading
multiplier:1.0f constant:10.0f];
或者这个:
NSLayoutConstraint* rightMarginConstraints = [NSLayoutConstraint
constraintWithItem:view attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:superview attribute:NSLayoutAttributeLeft
multiplier:1.0f constant:10.0f];
这两个都给了我你想要的输出。混合 ...Left
和 ...Leading
会给我你不需要的输出。
【讨论】:
我都试过了,它们给了我相同的结果。对我来说,左应该是绝对的,而领先应该是相对的,但我无法真正区分它们两者的区别。有人可以解释何时以及如何以不同方式使用Leading和Left吗?以上是关于如何在代码中创建与 @"H:|-10-[view]" 完全相同的 NSLayoutConstraint 对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MySQL/MariaDB 中创建与 root 具有相同权限的用户? [关闭]