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 ];
}