Ich verwende Schatten auf eine UITableViewCell mit CALayer.CALayer shadow in UITableViewCell Falsch gezeichnet
Hier ist mein Code:
- (void)addShadowToView:(UIView *)view
{
// shadow
view.layer.shadowColor = [[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor];
view.layer.shadowOpacity = 1.0f;
view.layer.shadowOffset = CGSizeMake(0.0f, 3.0f);
view.layer.shadowRadius = 6.0f;
CGRect shadowFrame = view.layer.bounds;
CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
view.layer.shadowPath = shadowPath;
}
Das Problem ist, dass für einige tableviewcells, wird der Schatten nicht über die gesamte Breite der Zelle erstrecken. Für einige Zellen wäre es korrekt, für andere wäre es fehlerhaft. Ich bemerke, dass die Rotation des Geräts auch Auswirkungen hat, und das erneute Laden der Daten der Tabellenansicht löst es manchmal.
Was ist der beste Weg, um dieses Problem zu beheben (und damit ich nicht die gesamte Tabellenansicht bei jeder Rotation usw. neu laden wollen)?
Beispiel Unterseite Zelle, wo Schatten korrekt angewendet wird:
Bottom of Zelle in derselben tableview nach dem Scrollen nach unten (shadow nur für den ersten 75% der Breite angewendet wird):
Edit: ich habe das Problem bemerkt haben aus diesen Zeilen Code verursacht wird:
CGRect shadowFrame = view.layer.bounds;
CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
view.layer.shadowPath = shadowPath;
Wenn ich le ave ihnen aus, alles ist in Ordnung. Aber mir wurde gesagt, dass es einen bestimmten Leistungsvorteil gibt, wenn man das benutzt. Irgendwie wird der Schatten nach dem Drehen nicht korrekt auf neue Dimensionen angewendet.
Es scheint, dass Sie dies aufrufen, bevor die Grenzen der Zelle auf die richtige Größe festgelegt wurden. Wenn Sie das automatische Layout verwenden, können Sie versuchen, 'layoutSubviews' in Ihrer 'UITableViewCell' -Unterklasse zu überschreiben und sie nach dem Aufruf von' super.layoutSubviews() ' – beyowulf
@beyowulf aufzurufen. Tatsächlich ist es bereits eine Unterklasse von UITableViewCell und diese Methode wird von layoutSubViews aufgerufen . Ich habe es bis zum Anwenden des Schattenpfads verfolgt, siehe Bearbeiten. – edwardmp