[英]UITableViewCell's frame only updated after scrolling
我根據代碼更改單元格的框架(在左側和右側添加邊距)。 問題是單元格僅在它們消失並通過滾動再次出現后才更新其幀。 我也使用了表格視圖的-reloadData,但這沒有幫助。 如何強制不滾動而重新繪制單元格?
- (UITableViewCell *) tableView: (UITableView *) tableView
cellForRowAtIndexPath: (NSIndexPath *) indexPath {
PersonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: @"TableViewCellID"
forIndexPath: indexPath];
cell.frame = CGRectMake(20, cell.frame.origin.y, cell.frame.size.width-2*20, cell.frame.size.height);
/* tried any of those
[cell setNeedsDisplay];
[cell setNeedsLayout];
[cell layoutIfNeeded];
*/
return cell;
}
我建議為此使用.xibs。 容易得多。
據我所知,您無法以這種方式更改單元格的框架。 單元格的高度由heightForRowAtIndexPath
確定,並且寬度設置為tableView的寬度。
您也許可以按照自己的方式以某種方式做到這一點,但據我所知,最干凈的方式如下。
如果要在單元格周圍留有余量,可以:
UIView
為UITableViewCell
創建筆尖,並使用約束放置邊框。 UIView
(讓我們將其稱為borderedContentView
)並將其放置為contentView
的直接子視圖 borderedContentView
的contentView
,與前置,頂部和底部設置為創建所需的邊框寬度值約束。 backgroundColor
,則必須將contentView
的backgroundColor
設置為與tableView
的backgroundColor
相同的顏色,以產生邊距的錯覺。 在tableView
的委托方法willDisplayCell:
或UITableViewCell
的子類awakeFromNib
或其他相關方法中執行此操作。 如果您不喜歡使用界面生成器,也可以以編程方式執行此操作,但是在IB中非常容易做到。
希望這可以幫助。
該問題的解決方案是重寫 UITableViewCell的setFrame方法。 這樣,它完美地工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.