【问题标题】:Overriding layoutSubViews: causes "CGAffineTransformInvert: singular matrix" randomly覆盖 layoutSubViews:随机导致“CGAffineTransformInvert:奇异矩阵”
【发布时间】:2011-09-19 12:36:17
【问题描述】:

我在UIScrollView 中覆盖layoutSubViews:,并且不时地为我重新定位的每个子视图获得“CGAffineTransformInvert:奇异矩阵”。然而,布局看起来完全没问题。 应用也不会崩溃。

有人知道这是什么原因吗?

【问题讨论】:

  • 对于任何想知道的人来说,“奇异矩阵”意味着反转矩阵不会产生任何变化。想想把 1 除以它本身,它产生 1——就是这样。在仿射变换矩阵的情况下,一种情况(不确定是否是唯一情况)是所有成员都为零的情况。从数学上讲,这意味着反转它不会产生任何变化;它是一个奇异矩阵。在几何上,这意味着任何如此转换的东西都将被缩放为 0,因此不会显示出来,这很糟糕。

标签: objective-c cocoa-touch


【解决方案1】:

我曾经遇到过这个错误,原因是在使用时设置了大小为 0 的字体

[UIFont fontWithName:size:] 

对于 UILabel。

【讨论】:

  • 我没有看到这个问题了,但也许你的回答对其他人有帮助,所以:接受。
  • 很好,这是我的问题。
  • 这就是我要找的。我的字体对象是 nil,所以点大小 = 0
【解决方案2】:

如果其他人为此苦苦挣扎(如果不是因为将标签字体大小设置为 0),当layoutSubViews: 在视图上运行时(例如 @ 987654322@ 或 UILabel) 具有大小为 (0,0) 的框架。

我花了很长时间才弄清楚,因为如果你的容器视图(例如滚动视图)没有设置为剪辑子视图,布局仍然看起来不错。

【讨论】:

    【解决方案3】:

    当我将 UIWebView 添加到我的 self.view 时,我也看到了这个问题。

    有问题的代码是:

    UIWebView *wv = [[UIWebView alloc]init];
    

    解决办法是:

    UIWebView *wv = [[UIWebView alloc]initwithFrame:[[UIScreen mainScreen]bounds]];
    

    或除 0.0 以外的任何帧大小。

    【讨论】:

      【解决方案4】:

      在我的应用程序中,我忘记在覆盖的 -layoutSubViews 方法中调用超类的 -layoutSubViews 时出现此错误,

      所以在您被覆盖的方法中的任何时候拨打[super layoutSubViews]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-04
        • 2014-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多