UITableViewCellAccessoryCheckmark涵盖iOS 7上的单元格分隔符

时间:2014-02-12 12:26:55

标签: ios uitableview

在iOS 7上使用此代码会导致分隔符视图被覆盖或缩短:

cell.accessoryType = UITableViewCellAccessoryCheckmark;

如何修复分隔符视图?

我正在使用原型单元格,但我没有对它们进行子类化。

enter image description here

[编辑]

以下是来自cellForRowAtIndexPath的相关代码:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];

if (indexPath.section == kDefaultViewSection){
    NSArray *defaultViewNames = @[LQSettingsSentenceView, LQSettingsFullTextView, LQSettingsFlashcardsView];
    NSString *preferredViewName = [LQSettings valueForKey:LQSettingsPreferredLessonView];
    if ([defaultViewNames[indexPath.row] isEqualToString:preferredViewName]){
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
}



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    if (indexPath.section != kDefaultViewSection){
        return;
    }

    // Just turn all checks off for a minute
    for (int x=0; x<3; x++) {
        NSIndexPath *ip = [NSIndexPath indexPathForRow:x inSection:kDefaultViewSection];
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:ip];
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;    
}

5 个答案:

答案 0 :(得分:4)

在我的情况下,我已经禁用了系统提供的分隔线,并在单元格的xib中添加了我的自定义分隔线。有时,右边的复选标记覆盖了底部分隔线的部分。我为解决问题做了什么是我已将尾随约束更改为cell而不是contentView。 [不是超级视图]

enter image description here

答案 1 :(得分:0)

在tableview中禁用分隔符,并在单元格底部添加子视图自定义分隔符视图。

答案 2 :(得分:0)

您可以在UITableViewCell的 count MIC-m H 138 L 3 M 22 X 45 Total 208 MIC-t H 34 L 90 M 30 X 53 Total 207 MIC-q H 73 L 13 M 53 X 68 Total 207 属性上设置backgroundView。在该自定义backgroundView中,添加一个分隔线视图,以扩展视图的整个宽度。 backgroundView不受附件视图的影响。

打开var backgroundView:UIView?

对于UITableViewStylePlain中的单元格,默认值为nil;对于UITableViewStyleGrouped,默认值为nil。 “ backgroundView”将作为子视图添加到所有其他视图的后面。

例如...

backgroundView

答案 3 :(得分:0)

所有答案都无济于事。我结束了:

  1. 使用✓作为UILabel为UITableViewCell创建一个自定义类。您也可以使用UIImage。
  2. 将IBOutlet拖到自定义类中,我将其命名为 checkMarkLabel
  3. 设置约束。
  4. 在主viewController类中,我声明了一个字符串属性 selectedItem
  5. cellforrow 函数中,

     if selectedItem == tableData[indexPath.tow]{
         cell.checkMarkLabel.isHidden = false
     } else {
         cell.checkMarkLabel.isHidden = true
     }
    
  6. didSelectRow 函数中,

     selectedItem = tableData[indexPath.tow]
     DispatchQueue.main.async {
         self.tableView.reloadRows(at: tableView.indexPathsForVisibleRows!, with: .none)
     }
    

答案 4 :(得分:-1)

转到Xib或Storyboard,选择tableview并将分隔符样式设置为单行。Snapshot