我的自定义UITableViewCell
包含UIImage
和UILabel
(请参阅下面的屏幕截图)。
如果我点击UITableViewCell
我会向其添加一个复选标记,但是当勾选标记可见时,UIImage
会向左移动(请参见下面的屏幕截图)。
关闭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];
}
答案 0 :(得分:0)
我已经找到了我自己的问题的解决方案。由于显示复选标记,UIImage
通过自动调整移动到左侧。所以我只需要重新调整自动调整大小。