簡體   English   中英

UITableViewCell的框架僅在滾動后更新

[英]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的寬度。

您也許可以按照自己的方式以某種方式做到這一點,但據我所知,最干凈的方式如下。

如果要在單元格周圍留有余量,可以:

  • 使用包含所有視圖的UIViewUITableViewCell創建筆尖,並使用約束放置邊框。
  • 將您的所有內容嵌入UIView (讓我們將其稱為borderedContentView )並將其放置為contentView的直接子視圖
  • 與地點的限制borderedContentViewcontentView ,與前置,頂部和底部設置為創建所需的邊框寬度值約束。
  • 如果您的tableView具有backgroundColor ,則必須將contentViewbackgroundColor設置為與tableViewbackgroundColor相同的顏色,以產生邊距的錯覺。 tableView的委托方法willDisplayCell:UITableViewCell的子類awakeFromNib或其他相關方法中執行此操作。
  • 享受邊緣細胞的榮耀。

如果您不喜歡使用界面生成器,也可以以編程方式執行此操作,但是在IB中非常容易做到。

希望這可以幫助。

該問題的解決方案是重寫 UITableViewCell的setFrame方法。 這樣,它完美地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM