iOS7下莫名其妙的layoutSubviews

现在是2016年11月22日晚上。 别人4年前买的,现在都落了灰的iPad,都是iOS8系统了。然而还有很多傻逼公司还在适配iOS7操作系统,我司就是其中一个!下面省略几万个字!。。。

如果你也很不幸,还在适配iOS7并且遇到了莫名其妙的问题,那可以继续看下去!(非常同情你)

谨以此纪念我浪费在iOS7上的2天时间!

背景概要:
写了个UIView,使用的是Autolayout,用了Masonry来布局各个控件。一切都很正常。然而最后测试报了一个iOS7上的奔溃。千辛万苦配置了iOS7的环境,找了一台iOS7的iPhone4来调试。果然奔溃,提示如下:

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. QYPPWelfareDetailHeaderView's implementation of -layoutSubviews needs to call super.'

我的layoutSubviews如下


   - (void)layoutSubviews
   {
     [super layoutSubviews]
     xxxxxxx
   }
  

一切正常! 但是就奔溃,而且提示莫名其妙。
我以前就听说过,iOS7下[super layoutSubviews]需要放在最后,然后马上改了下,奔溃没有了。


   - (void)layoutSubviews
   { 
     xxxxxxx
    [super layoutSubviews]
   }
  

立竿见影,不再奔溃了,然后细看页面,出现了一些UI交互上的问题,莫名其妙。 当时方向找错了,以为也是iOS7上的不兼容,于是经过各种折腾,最后发现,还是这个layoutSubviews闹的鬼。并不是轻易调整[super layoutSubviews] 的位置就完事了,在iOS7需要写2个才能万无一失!!!


   - (void)layoutSubviews
   {
     [super layoutSubviews]
     xxxxxxx
     if (!IOS8)
     {
         [super layoutSubviews];
     }
   }
  

发表评论

电子邮件地址不会被公开。 必填项已用*标注