Переопределение layoutSubViews: случайный случай "CGAffineTransformInvert: сингулярная матрица"

Я переопределяю layoutSubViews: в UIScrollView, и время от времени я получаю "CGAffineTransformInvert: сингулярная матрица" для каждого перехвата subview I. Однако макет выглядит вполне нормально. Приложение также не разбивается.

Кто-нибудь знает, что вызывает это?

Ответы

Ответ 1

Я когда-то ошибочно ошибался, устанавливая шрифт размером 0 при использовании

[UIFont fontWithName:size:] 

для UILabel.

Ответ 2

В случае, если кто-то борется с этим (и в случае, если это не из-за установки размера этикетки шрифта до 0), "CGAffineTransformInvert: вырожденная матрица", кажется, выходит, когда layoutSubViews: работает на представлении (например, UIScrollView или 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] в любой точке вашего переопределенного метода