UITableViewCell 删除按钮被覆盖

标签 uitableview ios7 xcode5

更新:

多亏了来自“Evgeny S”的信息,我已经能够确定覆盖删除按钮的是单元格背景。我在单元格初始化的开头调用了以下函数:

- (void) setupGradientsWithHeight:(int) the_height
{
    CAGradientLayer* gradient = [CAGradientLayer layer];

    gradient.frame  = CGRectMake(self.bounds.origin.x,
                                 self.bounds.origin.y,
                                 self.bounds.size.width,
                                 the_height);

    gradient.colors = [NSArray arrayWithObjects:
                       (id)[UIColor colorWithRed:218.0f/255.0f
                                           green:218.0f/255.0f
                                            blue:220.0f/255.0f
                                           alpha:1.0].CGColor,
                       (id)[UIColor colorWithRed:180.0f/255.0f
                                           green:180.0f/255.0f
                                            blue:184.0f/255.0f
                                           alpha:1.0].CGColor,nil];

    UIView* bgview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];

    [bgview.layer addSublayer:gradient];
    [self setBackgroundView:bgview];
}

问题是通过不添加背景 View 来解决的。但是,我想知道如何在保留每个单元格的渐变背景的同时解决它?

可能发生两件事之一。当删除按钮出现时,背景 View 要么被移动然后返回 - 或者它的大小正在减小然后返回。
我尝试弄乱渐变框架的宽度组件“self.bounds.size.width”,但我仍然看不到这会如何影响事情,因为此函数仅在单元格初始化时调用一次。

原帖:

我在 iOS6 SDK 下的 Xcode4 中创建了一个应用程序 - 但是在新环境(Xcode5 和 iOS7 SDK)中加载后我遇到了问题。请注意,我已经解决了进行转换时出现的所有构建错误和警告。

我有一个带有一些单元格的表格 View 。进入编辑模式后,如果单击红色切换按钮以启动单元格的删除模式 - 动画开始并出现“删除”按钮 - 但只是短暂的,然后突然重新隐藏。

我应该注意的另一件奇怪的事情是,即使删除按钮被覆盖 - 您仍然可以单击它应该在的位置并删除单元格。

我试图尽可能多地删除我的“自定义代码”,我已经删除了我已经覆盖的函数,并试图将事情尽可能恢复到原始状态 - 但无济于事。

有一次,我在输出日志中看到了一条奇怪的消息:
“当我们已经有了一个单元格时,试图设置一个滑动来删除单元格......这似乎不太好”。出于某种原因,该消息出现的时间更长,我似乎不记得当时我在做什么。

关于可能导致这种情况的任何想法或建议?

http://www.youtube.com/watch?v=vCAGzSaOwp4

最佳答案

这是 iOS 7 中无数的错误之一。

出于某种原因,iOS 将 backgroundView 移动到删除按钮上。
您可以通过子类化 backgroundView 并实现派生 View 的 setFrame 函数来解决此问题,如下所示:

- (void)setFrame:(CGRect)frame
{
    if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) {
        // background view covers delete button on iOS 7 !?!
        [super setFrame:CGRectMake(0, frame.origin.y, frame.size.width, frame.size.height)];
    } else {
        [super setFrame:frame];
    }
}

作为旁注:您可以通过在派生 View 中子类化和实现 layerClass 来避免对单独子层的需要:
+ (Class)layerClass
{
    return [CAGradientLayer class];
}

关于UITableViewCell 删除按钮被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938719/

相关文章:

objective-c - 如何在 iOS 7 中锁定纵向仅供查看

ios - 没有来自配置文件 "..."的身份(发生在我升级到 xcode 5 之后)

ios - IOS 中的表格单元 View 未正确缩放

ios - 自动调整单元格在 Swift 中不起作用

iphone - 如何知道用户是否在应用商店对应用程序进行了评分

ios - Xcode AMSlideMenu 只用一个按钮打开左侧菜单,禁用滑动

macos - "Check For Updates"使用 Sparkle 框架禁用(灰显)

ios - 以编程方式打开 UITableView 编辑操作按钮

ios - UISearchDisplayController、UITableView 和核心数据

ios - 如何为多个 UITextfields 使用单个 IOS UIDatePicker 对象