0

I want to place header view on top of screen with NSLayoutConstraint (I must use NSLayoutConstraint). When I do it like in below code, view places corruptly in somewhere else and also controllers background color turns black and nothing works. Where am I doing wrong?

I searched below posts for not opening a duplicate post but nothing fixed it:

Programmatically creating constraints bound to view controller margins

Programmatically Add CenterX/CenterY Constraints

EDIT: This controller is inside navigation controller but I'm not sure If It is related.

override func viewDidLoad(){
    self.view.backgroundColor = UIColor.white

    boxView.backgroundColor = Color.Common.welcomeScreenBackgroundColor.withAlphaComponent(0.5)
    boxView.translatesAutoresizingMaskIntoConstraints = false
    self.view.translatesAutoresizingMaskIntoConstraints = false
    self.view.addSubView(boxView)
}
override func viewDidLayoutSubviews() {

//Header = 20 from left edge of screen
let cn1 = NSLayoutConstraint(item: boxView, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1.0, constant: 0)
//Header view trailing end is 20 px from right edge of the screen
let cn2 = NSLayoutConstraint(item: boxView, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1.0, constant: 0)
//Header view height = constant 240
let cn3 = NSLayoutConstraint(item: boxView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant:240)
//Header view vertical padding from the top edge of the screen = 20
let cn5 = NSLayoutConstraint(item: boxView, attribute: .top, relatedBy: .equal, toItem: self.topLayoutGuide, attribute: .bottom, multiplier: 1.0, constant: 0)

self.view.addConstraints([cn1,cn2,cn3,cn5])
}
Emre Önder
  • 2,408
  • 2
  • 23
  • 73

1 Answers1

1

The problem was setting translatesAutoresizingMaskIntoConstraints to false on Superview. So I deleted the;

self.view.translatesAutoresizingMaskIntoConstraints = false

and this solves the problem. I think this causes app creates constraint for superview.

Emre Önder
  • 2,408
  • 2
  • 23
  • 73