2015-09-28 3 views
0

В UIView У меня есть метод presentView():Как добавить subview с ограничениями, чтобы сделать subview с тем же фреймом, что и его супервизор?

public func presentView() { 

    UIApplication.sharedApplication().delegate?.window??.addSubview(self) 

    let blurEffect = UIBlurEffect(style: .Light) 
    let blurEffectView = UIVisualEffectView(effect: blurEffect) 
    blurEffectView.backgroundColor = UIColor.yellowColor() 
    addSubview(blurEffectView) 

    let topConstraint = NSLayoutConstraint(item: blurEffectView, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Bottom, multiplier: 1, constant: 0) 
    let bottomConstraint = NSLayoutConstraint(item: blurEffectView, attribute: .Bottom, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1, constant: 0) 
    let leadingConstraint = NSLayoutConstraint(item: blurEffectView, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0) 
    let trailingConstraint = NSLayoutConstraint(item: blurEffectView, attribute: .Trailing, relatedBy: .Equal, toItem: self, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 0) 

    self.addConstraints([topConstraint, bottomConstraint, leadingConstraint, trailingConstraint]) 

    print("newframe: \(blurEffectView.frame)") 

} 

но STH это неправильно, потому что это выход на консоли:

newframe: (0.0, 0.0, 0.0, 0.0)

и результат:

enter image description here

+1

Если я правильно читать, 'self' является' UIView'. Затем вы должны добавить ограничения к 'self', а не' blurEffectView'. –

+0

@ DánielNagy Я обновил вопрос, вы можете помочь мне решить эту проблему? –

+0

Я думаю, до тех пор, пока вид не будет выложен, вы не получите его фактического кадра. Поэтому после 'self.addConstraints' вы не получите его прямо сейчас. –

ответ

5

Помните о:

blurEffectView.translatesAutoresizingMaskIntoConstraints = false 

, а затем:

let topConstraint = NSLayoutConstraint(item: blurEffectView, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1, constant: 0) 
    let bottomConstraint = NSLayoutConstraint(item: blurEffectView, attribute: .Bottom, relatedBy: .Equal, toItem: self, attribute: .Bottom, multiplier: 1, constant: 0) 
    let leadingConstraint = NSLayoutConstraint(item: blurEffectView, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: .Leading, multiplier: 1, constant: 0) 
    let trailingConstraint = NSLayoutConstraint(item: blurEffectView, attribute: .Trailing, relatedBy: .Equal, toItem: self, attribute: .Trailing, multiplier: 1, constant: 0) 

    addSubview(blurEffectView) 
    addConstraints([topConstraint, bottomConstraint, leadingConstraint, trailingConstraint]) 
    layoutIfNeeded() 
Смежные вопросы