2014-12-02 2 views
1

Я пытаюсь обновить свой взгляд, когда его границы меняются. Мой взгляд выставляется с помощью Auto Layout в своем супервизоре.Границы всегда равны нулю с помощью автоматического макета

Вот мой код для наблюдения за границами:

public override init() { 
     super.init() 
     self.addObserver(self, forKeyPath: "bounds", options: .New, context: nil) 
    } 

    public override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { 
     NSLog("[SkewedSplitView]: observer: %fx%f, %f:%f", self.bounds.width, self.bounds.height, self.bounds.origin.x, self.bounds.origin.y) 
    } 

Выход:

2014-12-02 12: 35: 35,018 XXX [7365: 2001261] [SkewedSplitView]: наблюдатель: 0.000000x0.000000, 0,000000: 0,000000

Я попытался даже Swits наблюдатели:

override public var bounds: CGRect { 
     didSet { 
      NSLog("[SkewedSplitView]: bounds: %fx%f, %f:%f", self.frame.width, self.frame.height, self.frame.origin.x, self.frame.origin.y) 
     } 
    } 

Выход:

2014-12-02 12: 35: 35,012 XXX [7365: 2001261] [SkewedSplitView]: оценки: 0.000000x0.000000, 0.000000: 0,000000

Оба были вызваны только один раз. Heres мой код, который выкладывает вид (с помощью Картография):

 let betters = SkewedSplitView() 
     betters.backgroundColor = UIColor.greenColor() 
     self.addSubview(betters) 

     constrain(betters, friends) { (betters, friends) in 
      betters.bottom == friends.top - 3 
      betters.leading == betters^.leading 
      betters.trailing == betters^.trailing 
      betters.height == 40 
     } 

На экране вид выложена просто отлично, имеет правильную структуру.

ответ

0

При использовании автовыброса границы, когда вызывается init, не установлены. Вы можете использовать ViewDidLayoutSubviews или ViewDidAppear. Поместите свой NSLog в любой из них, и вы получите границы, отличные от нуля. С уважением

+2

Ни один из них в UIView –

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