iOS:如何在没有 someView.addConstraints 的情况下使用 constraintsWithVisualFormat?

Posted

技术标签:

【中文标题】iOS:如何在没有 someView.addConstraints 的情况下使用 constraintsWithVisualFormat?【英文标题】:iOS: How to use constraintsWithVisualFormat without someView.addConstraints? 【发布时间】:2015-09-20 22:05:02 【问题描述】:

我遇到了一个问题,我不知道如何在某些特定视图上使用旧函数 constraintsWithVisualFormat 而没有 addConstraints 函数。

头文件说:

此方法将在未来的版本中被弃用,应该 避免。而是使用 +[NSLayoutConstraint activateConstraints:]。

好的,我对类函数很好,但我在这里误解了什么吗?我正在用纯 AutoLayoutUIScrollView (Technical Note) 解决我的问题。

所以我可以这样做,现在一切都会好起来的,但将来不会:

let views = ["containerView" : self.containerView]

self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[containerView]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views))
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[containerView]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views))

这种方法不会在后台设置NSLayoutConstraintfirstItemsecondItem 吗?

我如何为这个例子模仿正确的 VF?

我知道如何使用新的锚语法创建相同的约束,但我很好奇将来如何使用 VFL!?

【问题讨论】:

【参考方案1】:

constraintsWithVisualFormat 没有任何问题。标头只是建议您将self.scrollView.addConstraints(...) 替换为NSLayoutConstraint.activateConstraints(...)

let views = ["containerView" : self.containerView]

NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[containerView]|", options: [], metrics: nil, views: views))
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[containerView]|", options: [], metrics: nil, views: views))

在底层[containerView] 是您的容器视图,| 是超级视图——它们是firstItemsecondItem

【讨论】:

我会两次投票给| is the superview。一直都不知道。非常感谢。 @vacawama 我知道如何使用activateConstraints,但我的观点是我认为通过在特定视图上调用旧的addConstraints 函数将其添加到约束中。

以上是关于iOS:如何在没有 someView.addConstraints 的情况下使用 constraintsWithVisualFormat?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有真实设备的情况下在 iOS 上测试推送通知?

如何在 iOS 中使用没有故事板的 MvvmCross?

如何在 iOS7 上更改没有动画的 barTintColor?

如何修复“视频播放但在带有 expo 的 iOS 上没有声音”

当字典在iOS中没有标题时如何解析JSON?

在 iOS 中,如何在没有抗锯齿/插值的情况下绘制位图?