2017-02-01 4 views
0

У меня есть testView UIView и подзаголовок с именем testViewSub. TestView ограничивается использованием NSLayoutConstraint. И я устанавливаю рамки subView на testView.bounds. Но это не сработает. Вот кодNSLayoutConstraint - невозможно установить рамки subview в рамки родительского представления

let testView = UIView() 
    testView.backgroundColor = UIColor.red 

    self.view.addSubview(testView) 

    testView.translatesAutoresizingMaskIntoConstraints = false 


    NSLayoutConstraint(item: testView, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1.0, constant: 30).isActive = true 

    NSLayoutConstraint(item: testView, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1.0, constant: -30).isActive = true 

    NSLayoutConstraint(item: testView, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1.0, constant: 200).isActive = true 

    NSLayoutConstraint(item: testView, attribute: .height, relatedBy: .equal, toItem: self.view, attribute: .height, multiplier: 0.15, constant: 0).isActive = true 




    let testViewSub = UIView() 
    testViewSub.backgroundColor = UIColor.green 
    testViewSub.frame = testView.bounds 
    self.testView.addSubview(testViewSub) 

    testViewSub.translatesAutoresizingMaskIntoConstraints = false 

Но если я установить рамку TestView, используя CGRect. Оно работает.

ответ

0

Где находится макет? Я столкнулся с проблемами до того момента, когда ограничения не вступят в силу до тех пор, пока не появится представление, поэтому полагаться на правильные размеры кадров в viewDidLoad или viewWillAppear вызывает проблемы.

В этом случае, для меня работало testViewSub в viewDidAppear, хотя я не уверен, что так рекомендую. Использование ограничений, чтобы заложить его, так же, как с testView, также будет работать с viewDidLoad или viewWillAppear:

// layout constraints however you want - in this case they are such that green view's frame = red view's bounds 

    let testViewSub = UIView() 
    testViewSub.backgroundColor = UIColor.green 
    self.testView.addSubview(testViewSub) 

    NSLayoutConstraint(item: testViewSub, attribute: .leading, relatedBy: .equal, toItem: testView, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true 

    NSLayoutConstraint(item: testViewSub, attribute: .trailing, relatedBy: .equal, toItem: testView, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true 

    NSLayoutConstraint(item: testViewSub, attribute: .top, relatedBy: .equal, toItem: testView, attribute: .top, multiplier: 1.0, constant: 0).isActive = true 

    NSLayoutConstraint(item: testViewSub, attribute: .height, relatedBy: .equal, toItem: testView, attribute: .height, multiplier: 1.0, constant: 0).isActive = true 


    testViewSub.translatesAutoresizingMaskIntoConstraints = false 

Это также будет иметь дело с вращением лучше, чем просто установка рамы.

Смежные вопросы