显示复选标记附件视图移动表格内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了显示复选标记附件视图移动表格内容相关的知识,希望对你有一定的参考价值。

我按照Apple的文档将qview添加到UITableViewcell here

向单元格添加第三个标签。问题是当我在右侧显示标准的复选标记附件视图时,即使我没有显示第3个标签,整个单元格内容也会向左移动。截图如下。

这是我的代码:

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

    static NSString *CellIdentifier = @"MyCell";

    UILabel *mainLabel, *secondLabel, *thirdLabel;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    //cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    cell.accessoryType = UITableViewCellAccessoryNone;

    mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(20.0, 2.0, 100.0, 21.0)];
    mainLabel.tag = MAINLABEL_TAG;
    //mainLabel.font = [UIFont systemFontOfSize:14.0];
    //mainLabel.font = [UIFont fontWithName:@"Geeza Pro Bold" size:17.0];
    mainLabel.font = [UIFont boldSystemFontOfSize:17];
    mainLabel.textAlignment = UITextAlignmentLeft;
    mainLabel.textColor = [UIColor blackColor];
    mainLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
    [cell.contentView addSubview:mainLabel];

    secondLabel = [[UILabel alloc] initWithFrame:CGRectMake(20.0, 22.0, 100.0, 21.0)];
    secondLabel.tag = SECONDLABEL_TAG;
    //secondLabel.font = [UIFont systemFontOfSize:12.0];
    //secondLabel.font = [UIFont fontWithName:@"Geeza Pro" size:15.0];
    secondLabel.font = [UIFont systemFontOfSize:15];
    secondLabel.textAlignment = UITextAlignmentLeft;
    secondLabel.textColor = [UIColor darkGrayColor];
    secondLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
    [cell.contentView addSubview:secondLabel];

    thirdLabel = [[UILabel alloc] initWithFrame:CGRectMake(203.0, 11.0, 70.0, 21.0)];
    thirdLabel.tag = THIRDLABEL_TAG;
    //thirdLabel.font = [UIFont systemFontOfSize:12.0];
    //thirdLabel.font = [UIFont fontWithName:@"Geeza Pro Bold" size:17.0];
    thirdLabel.font = [UIFont boldSystemFontOfSize:17];
    thirdLabel.textAlignment = UITextAlignmentRight;
    thirdLabel.textColor = [UIColor darkGrayColor];
    thirdLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
    [cell.contentView addSubview:thirdLabel];


}
    else
    {
        mainLabel = (UILabel *)[cell.contentView viewWithTag:MAINLABEL_TAG];
        secondLabel = (UILabel *)[cell.contentView viewWithTag:SECONDLABEL_TAG];
        thirdLabel = (UILabel *)[cell.contentView viewWithTag:THIRDLABEL_TAG];
    }

    Car *car = [self.dataModel carAtIndex:indexPath.row];
   NSString *carName = [NSString stringWithFormat:@"%@",car.deviceName];
   NSString *carDetails = [NSString stringWithFormat:@"%@ at %@",car.date,car.location];
   NSString *carSpeed = [NSString stringWithFormat:@"%@ km/h",car.speed];


   mainLabel.text = carName;
   secondLabel.text = carDetails;
   thirdLabel.text = carSpeed;

return cell;
}

更新:根据@MattG的建议,我将UIViewAutoresizingFlexibleLeftMargin改为UIViewAutoresizingFlexibleWidth。现在,当选择一个单元格时,标签不会向左移动,但会有一些部分覆盖,如下图所示。

也许这是由我的- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath引起的?这是它的代码:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath    *)indexPath
{

    if([tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryCheckmark){
        [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;
    }
    else
    {
        [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
    }
}
答案

我首先回顾一下Apple的Table View Programming Guide for iOS。它有一个名为'A Closer Look at Table View Cells'的部分,它打破了预定义单元格的布局。

查看代码在单元格中有足够的内容可以考虑将UITableViewCell子类化以生成自己的自定义单元格。您可以将单元格标签的所有设置代码删除到一个类中,只关心在cellForRowAtIndexPath:方法中配置单元格。

但是,您的问题主要集中在表格视图单元格的布局上。将子视图的背景设置为不同的颜色有时很有用,这样您就可以看到哪个子视图正在使用哪个空间,以及如果我们引入其他子视图,它们如何相互作用,在本例中是附件视图。

要解决第三个标签的文本被截断的问题,首先要将标签配置为使用较小的字体大小。我会为所有标签做这个。现在,标签应根据标签的宽度调整文本。您还应检查文本对齐属性以确认它们已设置为最佳选项。

thirdLabel.adjustsFontSizeToFitWidth = YES;
thirdLabel.minimumScaleFactor = 0.4f;

这些更改的结果可能足以解决截断并保持您拥有的布局。

另一答案

调整单元格的约束条件,使附件类型显示的那一侧不受任何约束。

例如,我的配件显示在右侧,但是我的细胞项目被限制在所有4个边缘(顶部,底部,左侧,右侧)。由于附件是一个正确的选中标记,我将我的项目更改为顶部,左侧,高度和宽度限制(跳过右侧),现在,当附件出现时,它不会移动右侧锚点。

以上是关于显示复选标记附件视图移动表格内容的主要内容,如果未能解决你的问题,请参考以下文章

如何显示 UITableViewCell 附件复选标记

多个复选标记附件在 iOS7 中无法正常工作

设置静态表格视图单元格的复选标记

带有复选标记和详细信息披露的表格视图

如何在 Swift 3 中保存 UITableViewCell 附件复选标记的状态

当一个被点击时,UITableViewCell 复选标记被添加到多行