8

我正在使用 UITableviewCell 的背景视图,这是一个图像视图,我正在使用图像视图来实现第一个和最后一个单元格的两个侧角。它工作正常但问题是当我使用这个背景视图时,当我们按下 tableviewcell 默认编辑按钮时出现的默认单元格删除按钮被背景视图覆盖。如果我为背景视图提供清晰的颜色,它正在工作很好,但我想设置背景视图。

是否知道为什么删除按钮被单元格背景视图覆盖或隐藏?它发生在iOS 7中请帮助!提前致谢。

4

6 回答 6

4

如何代替使用背景视图。只需使用您的图像作为背景图案颜色尝试使用它

cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:YOUR_IMAGE]];
于 2013-10-09T09:57:31.630 回答
3


有完全相同的问题。通过在转换开始时将 backgroundView 发送回并在下一个 runloop 周期(使用 dispatch_async)再次发送来解决它。

这是您应该添加到单元格类 .m 文件(即 MyCustomTableCellView.m)中的代码

// Fix for iOS7, when backgroundView comes above "delete" button
- (void)willTransitionToState:(UITableViewCellStateMask)state {
    [super willTransitionToState:state];
    [self sendSubviewToBack:self.backgroundView];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self sendSubviewToBack:self.backgroundView];
    });
}

- (void)didTransitionToState:(UITableViewCellStateMask)state {
    [super didTransitionToState:state];
    [self sendSubviewToBack:self.backgroundView];
}
于 2013-10-15T11:35:55.967 回答
2

我今天在旧金山举行的 iOS 7 技术讲座活动中与 Apple UIKit 工程师进行了交谈,并确认这是一个开放的错误,Apple 将“很快”修复。

2013 年10 月 22 日更新: iOS 7.0.3 修复了这个问题。

于 2013-10-09T04:08:57.347 回答
1

我面临同样的问题,终于得到了解决方案。试试这个:而不是调用setBackgroundImagecellForRowAtIndexPath委托方法)。调用它willDisplayCell

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"cellList.png"]];
}

享受编码

于 2013-12-11T12:26:37.247 回答
1

解决方法

我在 Apple Developer Forums 中找到了解决方法。我在此基础上处理了backgroundViewselectedBackgroundView的情况。

我仍然在生产 iOS7.0.2 中看到这个问题。但是,此解决方法很简单并且可以解决问题(对我而言)。将此代码放入您的自定义 UITableViewCell 子类中。

你也可以在这个要点上找到它:https ://gist.github.com/idStar/7018104

- (void)layoutSubviews {
    [super layoutSubviews];

    [self applyEditingModeBackgroundViewPositionCorrections];
}


/**
 When using a backgroundView or selectedBackgroundView on a custom UITableViewCell 
 subclass, iOS7 currently 
 has a bug where tapping the Delete access control reveals the Delete button, only to have 
 the background cover it up again! Radar 14940393 has been filed for this. Until solved, 
 use this method in your Table Cell's layoutSubviews
 to correct the behavior.

 This solution courtesy of cyphers72 on the Apple Developer Forum, who posted the
 working solution here: https://devforums.apple.com/message/873484#873484
 */
- (void)applyEditingModeBackgroundViewPositionCorrections {
    if (!self.editing) { return; } // BAIL. This fix is not needed.

    // Assertion: we are in editing mode.

    // Do we have a regular background view?
    if (self.backgroundView) {
        // YES: So adjust the frame for that:
        CGRect backgroundViewFrame = self.backgroundView.frame;
        backgroundViewFrame.origin.x = 0;
        self.backgroundView.frame = backgroundViewFrame;
    }

    // Do we have a selected background view?
    if (self.selectedBackgroundView) {
        // YES: So adjust the frame for that:
        CGRect selectedBackgroundViewFrame = self.selectedBackgroundView.frame;
        selectedBackgroundViewFrame.origin.x = 0;
        self.selectedBackgroundView.frame = selectedBackgroundViewFrame;
    }
}

我们在这里所做的基本上是在表格单元格布局时将这些背景视图的 x 原点重置为零,如果它们处于编辑模式。为什么它们被错误地翻译,以及为什么它们高于 Apple 提供的“删除”按钮视图,这大概是 Apple 正在努力解决的已知问题的一部分。

于 2013-10-17T01:39:06.863 回答
0

试试下面的代码可能会对你有所帮助。

[youttablecell sendSubviewToBack:yourimageview]
于 2013-10-01T05:33:14.190 回答