XCODE 6.0.1,IOS 8,自定义UILabel,方法:LayoutSubviews
我有自定义的UILabel,可以在iOS6和iOS7上正常使用。但是在iOS 8上,这个标签的 - (void)layoutSubviews 方法永远不会被调用。在这里,我想补充一点,标签是我的故事板场景的一部分,它是在以前的Xcode版本中创建的。
iOS 8中的autoLayout系统会发生什么?是否有与视图布局相关的重大更改?
感谢任何帮助。
感谢。
答案 0 :(得分:0)
检查此问题的答案:Xcode6, iOS8 and (void)layoutSubviews
对于iOS8上的UILabel,不再调用layoutSubviews,因为Apple不希望任何人将其用作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 ];
}