zoukankan      html  css  js  c++  java
  • iOS:在tableView中通过Masonry使用autolayout在iOS7系统出现约束崩溃

    一、出现崩溃情景:

    给tableView创建一个头视图,也即tableHeaderView,然后使用Masonry并切换到iOS7/7.1系统给tableHeaderView中的所有子视图添加约束,此时出现崩溃。

     

    二、崩溃日志:

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

     

    三、崩溃原因:

    据说AutoLayout是iOS6的一个bug,在iOS7上已经解决了,但实际使用还是遇到了这个问题,有可能还是没修复。

     

    四、解决办法:

    (1)采用setFrame方法,在layoutSubViews中给子视图计算相对位置。

    (2)采用Masonry框架,不在layoutSubViews中进行,而是自定义一个方法,例如-(void)setupConstraint,然后在该方法中进行autolayout约束,在init或者initFrame中添加子视图后,调用该方法即可,也即[self setupConstraint]。

    (3)采用Masonry框架,在layoutSubViews中进行,在该方法中进行autolayout约束,但是必须放在[super layoutSubViews]方法之前进行

    (4)Swizzling网上比较多的说法是说给UITableView添加一个分类,在分类中覆盖+load方法,然后再load方法中使用swizzling来调整函数的执行顺序,保证执行完Autolayout后调用super -layoutSubviews。这是一个此方法的链接:关于swizzling

     

    五、额外补充:

    在ios7上,使用Autolayout添加子视图到UIScrollView上是没问题的。

  • 相关阅读:
    计算tableview的高度
    UIcollectionview与tableview的区别
    ios 屏幕适配
    避免表单多次提交
    Action权限验证
    正则小记
    在OnActionExecuting中阻止后面Action的执行
    批量上传图片uplodify插件
    表单多次提交
    windows 下安装 rabbitmq报init terminating in do_boot错误
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/6647308.html
Copyright © 2011-2022 走看看