XCODE 6.0.1,IOS 8,自定义 UILabel,方法:LayoutSubviews
我有自定义 UILabel 可以在 iOS6 和 iOS7 上正常工作。但是在 iOS 8 上,这个标签的-(void)layoutSubviews方法永远不会被调用。在这里,我想添加该标签是我的故事板场景的一部分,它是在以前的 Xcode 版本中创建的。
iOS 8 中的自动布局系统会发生什么?视图布局是否有任何重大变化?
任何帮助表示赞赏。
谢谢。
XCODE 6.0.1,IOS 8,自定义 UILabel,方法:LayoutSubviews
我有自定义 UILabel 可以在 iOS6 和 iOS7 上正常工作。但是在 iOS 8 上,这个标签的-(void)layoutSubviews方法永远不会被调用。在这里,我想添加该标签是我的故事板场景的一部分,它是在以前的 Xcode 版本中创建的。
iOS 8 中的自动布局系统会发生什么?视图布局是否有任何重大变化?
任何帮助表示赞赏。
谢谢。
检查这个问题的答案:Xcode6, iOS8 and (void)layoutSubviews
实际上,iOS8 上的 UILabel 不再调用 layoutSubviews,因为 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 ];
}