【问题标题】:iOS 8 Custom label LayoutSubviews method never get called?iOS 8 自定义标签 LayoutSubviews 方法永远不会被调用?
【发布时间】: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 版本中得到修复。

标签: ios iphone xcode ios8 xcode6.0.1


【解决方案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 ];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    相关资源
    最近更新 更多