Custom UITableViewCell中的图像在选择后移动

时间:2014-01-02 14:54:01

标签: objective-c uitableview ios7 uiimage

我的自定义UITableViewCell包含UIImageUILabel(请参阅下面的屏幕截图)。 enter image description here

如果我点击UITableViewCell我会向其添加一个复选标记,但是当勾选标记可见时,UIImage会向左移动(请参见下面的屏幕截图)。 enter image description here

关闭Autolayout,内容模式设置为UIViewContentModeRight(通过故事板)。

我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MarkerCell *cell = (MarkerCell *)[tableView dequeueReusableCellWithIdentifier:@"marker"];

    markerCategories = [[NSMutableArray alloc] init];

    for (Marker *marker in self.allMarkers) {
        BOOL isEqual = NO;
        for (NSString *string in markerCategories) {
            if ([marker.identifier isEqualToString:string]) {
                isEqual = YES;
            }
        }
        if (isEqual == NO) {
            [markerCategories addObject:marker.identifier];
        }
    }

    cell.backgroundColor = [UIColor clearColor];
    cell.opaque = NO;
    cell.backgroundView = nil;

    cell.lbMarkerName.text = markerCategories[indexPath.row];
    cell.ivIcon.image = [UIImage imageNamed:[markerCategories[indexPath.row] lowercaseString]];

    if ([markerCategories[indexPath.row] isEqualToString:@"Löschteich"]) cell.ivIcon.image = [UIImage imageNamed:@"loeschteich"];
    if (!cell.ivIcon.image) cell.ivIcon.image = [UIImage imageNamed:@"sonstige"];

    return cell;
}


   - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MarkerCell *cell = (MarkerCell *)[tableView cellForRowAtIndexPath:indexPath];

    // handle Checkmark
    if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
        [cell setAccessoryType:UITableViewCellAccessoryNone];

        // remove Marker(s)
        for (Marker *marker in self.allMarkers) {
            if ([markerCategories[indexPath.row] isEqualToString:marker.identifier]) {
                [markersToShow removeObject:marker];
            }
        }
    }
    else
    {
        [cell setAccessoryType:UITableViewCellAccessoryCheckmark];

        // add Marker(s)
        for (Marker *marker in self.allMarkers) {
            if ([markerCategories[indexPath.row] isEqualToString:marker.identifier]) {
                [markersToShow addObject:marker];
            }
        }
    }

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    [self printMarkers];
}

1 个答案:

答案 0 :(得分:0)

我已经找到了我自己的问题的解决方案。由于显示复选标记,UIImage通过自动调整移动到左侧。所以我只需要重新调整自动调整大小。