iOS 8 自定义标签 LayoutSubviews 方法永远不会被调用?
Posted
技术标签:
【中文标题】iOS 8 自定义标签 LayoutSubviews 方法永远不会被调用?【英文标题】:iOS 8 Custom label LayoutSubviews method never get called? 【发布时间】:2014-09-26 21:07:26 【问题描述】:XCODE 6.0.1,ios 8,自定义 UILabel,方法:LayoutSubviews
我有自定义的 UILabel,它在 iOS6 和 iOS7 上运行良好。但是在 iOS 8 上,这个标签的 -(void)layoutSubviews 方法永远不会被调用。在这里我想添加该标签是我的故事板场景的一部分,它是在以前的 Xcode 版本中创建的。
iOS 8 中的自动布局系统会发生什么?视图布局是否有重大变化?
感谢任何帮助。
谢谢。
【问题讨论】:
似乎问题已在 iOS 8.1 beta 版本中得到修复。 【参考方案1】:查看此问题的答案: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 ];
【讨论】:
以上是关于iOS 8 自定义标签 LayoutSubviews 方法永远不会被调用?的主要内容,如果未能解决你的问题,请参考以下文章