我想將CALayer添加到我的UITableViewCell的底部以獲得一點「陰影」效果。問題在於當表格向上滾動並移出屏幕時,所以當您向下滾動時,它不可見。如果您從屏幕向下滾動單元格然後備份它們顯示正常。將CALayer添加到UITableViewCell滾動後刪除
I have a gif here showing what's happening.
這是我正在做它:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"CellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
cell.textLabel.text = [NSString stringWithFormat:@"Row %d", (int)indexPath.row];
CALayer *bottomBorder = [CALayer layer];
bottomBorder.frame = CGRectMake(0.0f, cell.frame.size.height, cell.frame.size.width, 1.0f);
bottomBorder.backgroundColor = [UIColor colorWithWhite:0.9f alpha:1.0f].CGColor;
[cell.layer addSublayer:bottomBorder];
cell.clipsToBounds = NO;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
這我也利用每個小區的獨特cellIdentifier,希望他們不會被重用,因此嘗試層不會這樣刪除:
//Same code as before just this changed
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"%ld_%ld", (long)indexPath.row, (long)indexPath.section]];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[NSString stringWithFormat:@"%ld_%ld", (long)indexPath.row, (long)indexPath.section]];
}
//Same code continued...
所以我的問題是,當一個單元格被重用,CALayer添加到它被刪除。當單元格從屏幕上滾動並重新打開時,我需要做些什麼才能保留該圖層。
編輯:
我也試過這不工作之一:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"CellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
CALayer *bottomBorder = [CALayer layer];
bottomBorder.frame = CGRectMake(0.0f, cell.frame.size.height, cell.frame.size.width, 1.0f);
bottomBorder.backgroundColor = [UIColor colorWithWhite:0.9f alpha:1.0f].CGColor;
[cell.layer addSublayer:bottomBorder];
cell.clipsToBounds = NO;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
cell.textLabel.text = [NSString stringWithFormat:@"Row %d", (int)indexPath.row];
return cell;
}
謝謝您花時間回答。我完全理解UITableView如何重用細胞。我所做的只是試圖以某種形式解決問題,即使錯誤的方式將其變爲工作狀態。我已經更新了我的問題,並提出了更清晰的問題。 – random
除了你發佈的代碼是錯誤的。向單元添加圖層的代碼屬於「if(!cell)」條件內。相反,每次你重新使用一個單元格時,你都會添加一個新層,這是不好的。這告訴我你不像你認爲的那樣瞭解細胞再利用。 –
我想我應該發佈了所有我試過的代碼。把它放在'if(!cell)'中也不能解決問題。 – random