Ich habe eine ziemlich einfache benutzerdefinierte Unterklasse von UIView:
%Vor%Wenn ich initWithFrame: rect für diese Klasse mit einigen Nicht-Null-Rect aufrufen, funktioniert es gut; aber wenn ich initWithFrame: CGRectZero aufruft, wird DrawRect -nie- auch dann aufgerufen, wenn ich den Frame der Ansicht auf eine Nicht-Null-Rect-Datei ändere.
Ich verstehe sicherlich, warum eine Ansicht mit einem Null-Rahmen niemals drawRect haben würde: genannt, aber warum wird sie nie aufgerufen, selbst nachdem der Rahmen geändert wurde?
Ein kurzer Blick auf die Apple Docs sagt dies
Wenn Sie das Rahmenrechteck ändern, wird die Ansicht automatisch erneut angezeigt, ohne die drawRect: -Methode aufzurufen. Wenn Sie möchten, dass UIKit die drawRect: -Methode aufruft, wenn sich das Rahmenrechteck ändert, legen Sie die Eigenschaft contentMode auf UIViewContentModeRedraw fest.
Dies ist in der Dokumentation für die Frame-Eigenschaft:
Ссылка
Wenn Sie möchten, dass die Ansicht neu gezeichnet wird, rufen Sie einfach setNeedsDisplay auf und Sie sollten in Ordnung sein (oder, wie die Dokumente sagen, können Sie sie auf UIViewContentModeRedraw setzen, aber es liegt an Ihnen)