ios - 单元格表格视图内的视图位置仅在滚动后才会更改

Posted

技术标签:

【中文标题】ios - 单元格表格视图内的视图位置仅在滚动后才会更改【英文标题】:ios - view position inside cell tableview changes only after scrolling 【发布时间】:2015-08-02 19:13:35 【问题描述】:

我有一个使用 ios 8.0+ 的表格,我在每个单元格中添加了一个复选框 - 在 iphone 5 上效果很好,但是在 iphone 6 上进行测试时 - 复选框只有在滚动后才处于正确的位置...... (第二张是滚动后的)

**** 还不能添加照片:) 所以我在第一次加载时实际看到的是复选框得到了一些右填充 -> 在我滚动一些复选框后向右移动 - 它们应该在哪里 下面的代码 谢谢!

CGFloat y =self.navigationController.navigationBar.frame.size.height + self.navigationController.navigationBar.frame.origin.y;
tableData = [[UITableView alloc] initWithFrame:CGRectMake(5, y+10, self.view.frame.size.width, self.view.frame.size.height - y -30 - nextButton.frame.size.height -10) style:UITableViewStylePlain];
tableData.dataSource = self;
tableData.delegate = self;



[self.view addSubview:tableData];

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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

  
   else
    
        CTCheckbox *check =  [cell.subviews objectAtIndex:1];
        [check removeFromSuperview];
    






CTCheckbox *checkbox;

cell.contentView.backgroundColor = [UIColor grayColor];
checkbox = [[CTCheckbox alloc] initWithFrame:CGRectMake(cell.frame.size.width-60, cell.frame.size.height/2-10, 50, 20.0)];
checkbox.alpha = 0.7;
[checkbox addTarget:self action:@selector(checkboxDidChange:) forControlEvents:UIControlEventValueChanged];
checkbox.tag = indexPath.row;
[checkbox setColor:[BlendedColors pink] forControlState:UIControlStateNormal];

//Expertise label
UIFont *myFont = [UIFont systemFontOfSize:12.0 ];
cell.textLabel.font  = myFont;

cell.textLabel.text = [experties objectAtIndex:indexPath.row];
cell.textLabel.textColor = [BlendedColors black];
[cell addSubview:checkbox];
cell.selectionStyle = UITableViewCellStyleDefault;


if([[selectedCheckBox objectAtIndex:indexPath.row]isEqualToString:@"YES"])

    checkbox.checked = YES;

else
    checkbox.checked = NO;



//cell.contentView.backgroundColor = [UIColor blackColor];
return cell;

【问题讨论】:

【参考方案1】:

固定 - 第一个单元格宽度始终为 320

添加了 3 行

if (cell == nil) 

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    //Fix Bug - first cell view is always 320 - now its dynamic(cell width = device width)
        CGRect cellFrame = cell.frame;
        cellFrame.size.width = self.view.frame.size.width;
        cell.frame = cellFrame;


  

【讨论】:

以上是关于ios - 单元格表格视图内的视图位置仅在滚动后才会更改的主要内容,如果未能解决你的问题,请参考以下文章

具有文本字段滚动问题的 iOS 表格视图

如何在表格视图 IOS 内的滚动视图中创建文本字段

表视图 didSelectRowAtIndexPath,仅在选择第二次单击后才有效

表视图单元格仅在屏幕外时自动布局

UITableViewCell 框架仅在滚动后更新

仅在表格视图的特定单元格上显示和隐藏视图