簡體   English   中英

iOS 8自定義標簽LayoutSubviews方法永遠不會被調用?

[英]iOS 8 Custom label LayoutSubviews method never get called?

XCODE 6.0.1,IOS 8,自定義UILabel,方法:LayoutSubviews

我有自定義UILabel,可在iOS6和iOS7上正常工作。 但是在iOS 8上,永遠不會調用此標簽的-(void)layoutSubviews方法。 在這里,我想添加標簽是我的故事板場景的一部分,它是在以前的Xcode版本中創建的。

iOS 8中的autoLayout系統會怎樣? 視圖布局是否有重大變化?

任何幫助表示贊賞。

謝謝。

檢查以下問題的答案: Xcode6,iOS8和(void)layoutSubviews

實際上,iOS8上的UILabel不再調用layoutSubviews,因為蘋果公司不希望有人使用它作為Superview。

我正在使用ReactiveCocoaLayout,因此可以通過訂閱rcl_frameSignal或rcl_boundsSignal來完成。

-(void)awakeFromNib { [ self.rcl_boundsSignal subscribeNext: ^( NSValue* boundsValue ) { //layout changed } ]; }
Or you can use simple KVO to know when frame has been changed:
-(void)dealloc
{
   [ self removeObserver: self forKeyPath: @"layer.bounds" ];
}

-(void)observeValueForKeyPath:( NSString* )keyPath
                     ofObject:( id )object
                       change:( NSDictionary* )change
                      context:( void* )context
{
   if ( [ keyPath isEqualToString: @"layer.bounds" ] )
   {
      //layoutSubviews
   }
   else
   {
      [ super observeValueForKeyPath: keyPath
                      ofObject: object
                        change: change
                       context: context ];
   }
}

-(void)awakeFromNib
{
   [ self addObserver: self
           forKeyPath: @"layer.bounds"
              options: NSKeyValueObservingOptionNew
              context: 0 ];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM