Swift NSLayoutConstraint 基于方程的常量

Posted

技术标签:

【中文标题】Swift NSLayoutConstraint 基于方程的常量【英文标题】:Swift NSLayoutConstraint Equation Based Constant 【发布时间】:2015-07-03 08:45:27 【问题描述】:

我一直在以编程方式学习 Swift,并在此过程中构建了一个相机(电影)应用程序。

我正在研究约束,这非常简单。但我现在想做的是实现纵横比;用户可以在决定视图大小的标准电影和电视长宽比之间循环。

在构建通用应用程序时,约束需要基于视图的高度。所以,我需要一个常数,它是一个方程而不是一个数值。

类似:

constant:self.view.Height/((self.view.Width*Consequent)/Antecedent)

我找到了以下博客文章,并以此为基础进行了尝试。但由于这篇文章是在 Swift 处于 BETA 时写的,所以我很难重新创建任何东西。

http://blog.ikiapps.com/post/91024428050/making-auto-layout-constraints-more-like-math-in

我猜这个解决方案很简单,但由于我是 Swift(和 ios 开发)的新手,我可能忽略了一些东西。任何帮助、建议、已知帖子等将不胜感激!谢谢!

【问题讨论】:

【参考方案1】:

以编程方式设置约束

    var verticalSpaceFromBotton = NSLayoutConstraint(item: objectName, attribute: NSLayoutAttribute.BottomMargin, relatedBy: NSLayoutRelation.Equal, toItem: self.viewControllerName, attribute: .BottomMargin, multiplier: 1, constant: -5)
    self.viewControllerName.addConstraint(verticalSpaceFromBotton)
    var trailingSpace = NSLayoutConstraint(item: objectName, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: self.viewControllerName, attribute: .Trailing, multiplier: 1, constant: -7)
    self.viewControllerName.addConstraint(trailingSpace)
    var width = NSLayoutConstraint(item: objectName, attribute: .Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: UIScreen.mainScreen().bounds.size.width - 14)
    self.viewControllerName.addConstraint(width)
    var height = NSLayoutConstraint(item: objectName, attribute: .Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 44)
    self.viewControllerName.addConstraint(height)

【讨论】:

我的要求是在视图控制器底部设置一个 UIButton,高度 = 44,宽度 = UIScreen.mainScreen().bounds.size.width - 14 正如我所说,可能很简单。最后写给那些遇到同样问题的人:` var cameraViewHeight = NSLayoutConstraint(item: cameraView!, attribute: .Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant : (UIScreen.mainScreen().bounds.size.width*9)/16)` 对不起,我不能得到倒数第二条评论 哦,欢迎 Michael David Geppelt :)

以上是关于Swift NSLayoutConstraint 基于方程的常量的主要内容,如果未能解决你的问题,请参考以下文章

更改 NSLayoutConstraint 时的 SWIFT 动画

NSLayoutConstraint 的 Unsatisfiable Constraint 以编程方式更改 - swift

如何在 swift 的扩展中声明 NSLayoutConstraint 类型的变量

如何在 swift 中使用 NSLayoutConstraint 根据屏幕大小更改设计

Swift 3 - NSLayoutConstraint CollectionView 附加到另一个视图

Swift:UIButton 不可点击,NSLayoutConstraint heightAnchor 问题