显示复选标记附件视图移动表格内容
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个边缘(顶部,底部,左侧,右侧)。由于附件是一个正确的选中标记,我将我的项目更改为顶部,左侧,高度和宽度限制(跳过右侧),现在,当附件出现时,它不会移动右侧锚点。
以上是关于显示复选标记附件视图移动表格内容的主要内容,如果未能解决你的问题,请参考以下文章