簡體   English   中英

UITableviewCell子視圖僅在滾動或單元重用(iOS)上出現

[英]UITableviewCell subview appears only on scrolling or cell reuse (iOS)

如下圖所示, UITableView子視圖僅在重新加載表視圖或單元格重用時出現(主要是在滾動過程中)。 藍色圓圈是我要在UITableViewCell顏色。 第一次出現時,它將是一個小點,如您在圖片中看到的那樣,並且在滾動或刷新表格視圖時,它顯示為一個完整的圓圈。

可能是什么問題?

屏幕圖像

我在cellforRowAtIndexPath方法中使用以下代碼

cell.categoryRoundBackground.layer.cornerRadius=cell.categoryRoundBackground.frame.size.height/2;

嘗試使用dequeueReusableCellWithIdentifier:forIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    CustomTableViewCell *cell1 = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomID" forIndexPath:indexPath];

最可能的問題是,當您首次通過調用以下內容訪問單元格的幀高度時

cell.categoryRoundBackground.frame.size.height / 2

該單元格從未放置在表格視圖中,也不知道其框架高度將是什么,因此它使用一些默認值。 實際高度取決於您的代碼在heightForRowAtIndexPath:方法中返回的值。

您可以通過自己計算幀大小來解決此問題。 您應該能夠執行此操作,因為您的代碼將值提供給heightForRowAtIndexPath:

在視圖布局其子視圖之前,可能需要更改拐角半徑。 你應該盡量把線

cell.categoryRoundBackground.layer.cornerRadius=cell.categoryRoundBackground.frame.size.height/2;

- (void)viewDidLayoutSubviews {}

您必須重寫CustomTableViewCell中的方法

- (void)layoutSubviews{
   [super layoutSubviews];
   self.categoryRoundBackground.layer.cornerRadius=self.categoryRoundBackground.frame.size.height/2;
   self.categoryRoundBackground.layer.masksToBounds = YES;
}

CellForRowAtIndexPath中:您必須在最后寫這些行

// Update layout
[cell.contentView setNeedsLayout];
[cell.contentView layoutIfNeeded];

希望它能解決您的問題

暫無
暫無

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

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