iOS 8 Пользовательский ярлык Метод LayoutSubviews никогда не вызывается?

XCODE 6.0.1, IOS 8, пользовательская UILabel, метод: LayoutSubviews

У меня есть пользовательский UILabel, который отлично работает на iOS6 и iOS7. Но на iOS 8 метод labelSubviews (void) никогда не вызывается. Здесь я хотел бы добавить, что этот ярлык является частью моей сцены раскадровки, и он был создан в предыдущей версии XCode.

Что происходит с системой autoLayout в iOS 8? Есть ли какие-либо серьезные изменения, связанные с макетом представления?

Любая помощь приветствуется.

Благодарю.

1 ответ

Проверьте ответ на этот вопрос: Xcode6, iOS8 и (void)layoutSubviews

Действительно, layoutSubviews больше не вызывается для UILabel на iOS8, так как Apple не ожидает, что кто-нибудь использует его в качестве суперпредставления.

Я использую 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 ];
}
Другие вопросы по тегам