我正在使用UITableviewCell的背景视图,这是一个imageview,我使用图像视图来实现第一个和最后一个单元格的两个侧角。它工作正常但问题是当我使用这个背景视图时,我们按下tableviewcell默认编辑按钮时出现的默认单元格删除按钮被背景视图覆盖。如果我为背景视图提供清晰的颜色它正在工作很好,但我想要设置背景视图。
有什么想法为什么删除按钮被单元格背景视图覆盖或隐藏? 它发生在iOS 7中 请帮忙!提前谢谢。
答案 0 :(得分:4)
如何而不是使用背景视图。只需使用您的图像作为背景patternn颜色尝试使用此
cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:YOUR_IMAGE]];
答案 1 :(得分: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];
}
答案 2 :(得分:2)
我今天在SF的iOS 7 Tech Talks活动中与一位Apple UIKit工程师进行了交谈,并确认这是一个开放的错误,将很快由Apple修复。
更新10/22/13: iOS 7.0.3解决了这个问题。
答案 3 :(得分:1)
我在Apple Developer Forums中找到了一个解决方法的答案。我已经构建了它来处理 backgroundView 和 selectedBackgroundView 的情况。
我仍然在生产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正在努力解决的已知问题的一部分。
答案 4 :(得分:1)
我面临同样的问题,终于得到了解决方案。试试这个:
而不是在setBackgroundImage
中调用cellForRowAtIndexPath
(委托方法)。在willDisplayCell
:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"cellList.png"]];
}
享受编码
答案 5 :(得分:0)
尝试以下代码可能会对您有所帮助。
[youttablecell sendSubviewToBack:yourimageview]