【问题标题】:NSLayoutConstraint and assigning a variable that is an intNSLayoutConstraint 并分配一个 int 变量
【发布时间】:2015-09-07 02:50:26
【问题描述】:

我觉得这可能是一个非常简单的问题,因为我刚刚开始使用 Swift,但对这种行为有点困惑。

我有一个看起来像这样的 NSLayoutConstraint:

let verticalConstraint = NSLayoutConstraint(item: newView, 
         attribute: NSLayoutAttribute.CenterY, 
        relatedBy: NSLayoutRelation.Equal, 
        toItem: view, 
        attribute: NSLayoutAttribute.CenterY, 
        multiplier: 1, 
        constant: 0)

并且工作正常。当我将其更改为

class ViewController: UIViewController {

  let newView = UIView()
  var verticalStartingPoint = 0

  override func viewDidLoad() {
    super.viewDidLoad()
    newView.backgroundColor = UIColor.blueColor()
    newView.setTranslatesAutoresizingMaskIntoConstraints(false)
    view.addSubview(newView)

    // not the part that is problem
    let horizontalConstraint = NSLayoutConstraint(item: newView, 
         attribute: NSLayoutAttribute.CenterX, 
         relatedBy: NSLayoutRelation.Equal, 
         toItem: view, 
         attribute: NSLayoutAttribute.CenterX, 
         multiplier: 1, 
         constant: 0)
    view.addConstraint(horizontalConstraint)


    var verticalConstraint = NSLayoutConstraint(item: newView, 
        attribute: NSLayoutAttribute.CenterY, 
       relatedBy: NSLayoutRelation.Equal, 
      toItem: view, attribute: NSLayoutAttribute.CenterY, 
      multiplier: 1, 
      constant: self.verticalStartingPoint  // <- seems to be error
)
view.addConstraint(verticalConstraint)

它给了我一个错误说明:

/Users/jt/tmp-ios/autolayout-test/autolayout-test/ViewController.swift:31:30: 找不到接受的“NSLayoutConstraint”类型的初始化程序 类型的参数列表'(项目:UIView,属性:NSLayoutAttribute, relatedBy:NSLayoutRelation,toItem:UIView!,属性: NSLayoutAttribute,乘数:Int,常量:Int)'

但我不知道为什么?在这种情况下,我似乎只是在分配一个变量。

【问题讨论】:

    标签: ios swift nslayoutconstraint


    【解决方案1】:

    Swift 不会自动将 Int 类型的变量转换为 CGFloat 类型的变量。您必须明确转换:

    var verticalConstraint = NSLayoutConstraint(item: newView,
        attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal,
        toItem: view, attribute: NSLayoutAttribute.CenterY,
        multiplier: 1, constant: CGFloat(self.verticalStartingPoint))
    

    Swift 会自动将数字整数文字(如“0”)转换为任何数字类型。这就是你第一次尝试成功的原因。

    您可以更改变量的类型,而不是在调用中转换为NSLayoutConstraint

    var verticalStartingPoint: CGFloat = 0
    

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 2021-04-07
      相关资源
      最近更新 更多