[FIXED] So maskieren Sie UITableViewCells unter einem transparenten UITableView-Header

Ausgabe

Ich möchte, dass die Kopfzeile die Zellen maskiert, aber nicht den Hintergrund.

Ich habe eine UITableView mit transparenten Kopfzeilen und Zellen, die der Benachrichtigungszentrale von Apple ähneln (wenn Sie auf Ihrem iPhone in der Statusleiste nach unten wischen). Ich kann nicht herausfinden, wie die Zellen maskiert werden, damit sie beim Scrollen nicht unter der Kopfzeile angezeigt werden.

Ich habe versucht, die contentInsets der Tabellenansicht zu ändern, und ich habe versucht, den Rahmen der Kopfzeilenansicht in einen negativen Ursprung zu ändern.

Lösung

Versuchen Sie, eine Unterklasse zu erstellen UITableviewCellund diese Methoden hinzuzufügen

- (void)maskCellFromTop:(CGFloat)margin {
    self.layer.mask = [self visibilityMaskWithLocation:margin/self.frame.size.height];
    self.layer.masksToBounds = YES;
}

- (CAGradientLayer *)visibilityMaskWithLocation:(CGFloat)location {
    CAGradientLayer *mask = [CAGradientLayer layer];
    mask.frame = self.bounds;
    mask.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithWhite:1 alpha:0] CGColor], (id)[[UIColor colorWithWhite:1 alpha:1] CGColor], nil];
    mask.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:location], [NSNumber numberWithFloat:location], nil];
    return mask;
}

und fügen Sie diese Delegate-Methode hinzuUITableView

#pragma mark - UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    for (iNotifyTableViewCell *cell in self.visibleCells) {
        CGFloat hiddenFrameHeight = scrollView.contentOffset.y + [iNotifyHeaderView height] - cell.frame.origin.y;
        if (hiddenFrameHeight >= 0 || hiddenFrameHeight <= cell.frame.size.height) {
            [cell maskCellFromTop:hiddenFrameHeight];
        }
    }
}

*Beachten Sie, dass [iNotifyHeaderView height]dies die Höhe der HeaderView. und #import <QuartzCore/QuartzCore.h>für die benutzerdefinierte Zelle verwenden.


Beantwortet von –
Alex Markman


Antwort geprüft von –
Senaida (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like