2016-04-16 69 views
4

我一直在尝试以编程方式添加约束到一个视图,我也以编程方式添加到我的视图控制器。但是,似乎没有遵循约束条件。以编程方式添加约束不工作

该视图已被添加到视图控制器的故事板,但直到后来才真正添加到视图控制器视图(请参阅下面的屏幕截图)。

enter image description here

我已经尝试添加各种限制,但到目前为止,他们都没有工作。我现在简化它到下面的单个约束,即使这不起作用。我究竟做错了什么?

@IBOutlet var loadingView: LoadingView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    displayLoadingView(true) 
} 

func displayLoadingView(display: Bool) { 
    if display { 
     view.addSubview(loadingView) 

     let widthConstraint = NSLayoutConstraint(item: loadingView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 50.0) 

     view.addConstraint(widthConstraint) 
    } 
} 
+0

你设置了'view.translatesAutoresizingMaskIntoConstraints = false'吗?或者以任何方式查看你设置的限制程序 – HardikDG

+0

@Pyro这正是我所错过的。你可以发布它作为答案,因为你是第一次发布这个? – robhasacamera

回答

17

设置translatesAutoresizingMaskIntoConstraints = false以任何视图您是设置约束编程。

apple doc
translatesAutoresizingMaskIntoConstraints

如果您想使用自动布局来动态计算您的视图的大小和位置,则必须将此属性设置为false,然后提供一个无模糊的,不冲突该视图的一组约束。

+0

其实我必须设置'loadingView.translatesAutoresizingMaskIntoConstraints = false'才能使用。但是,这个答案绝对让我在需要的地方。谢谢! – robhasacamera

1

您没有设置所有必要的约束条件,这可能是原因。考虑以下粗略示例。 MyView界面在独立的xib文件中定义。希望它有帮助:

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     guard let myView = loadFromNib("MyView") else { 
      return 
     } 

     view.addSubview(myView) 

     myView.translatesAutoresizingMaskIntoConstraints = false 
     view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-15-[myView]-15-|", options: NSLayoutFormatOptions.DirectionLeadingToTrailing, metrics: nil, views: ["myView": myView])) 

     view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-15-[myView]-15-|", options: NSLayoutFormatOptions.DirectionLeadingToTrailing, metrics: nil, views: ["myView": myView])) 
    } 

    func loadFromNib(cls: String) -> UIView? { 

     return NSBundle.mainBundle().loadNibNamed(cls, owner: nil, options: nil)[0] as? UIView 
    } 
} 
+0

@Pyro首先发布了“translatesAutoresizingMaskIntoConstraints”,这是我所需要的。但我很欣赏看到'constraintsWithVisualFormat'。这已经非常有用了。 – robhasacamera

相关问题