Objective c 在iOS7中尝试删除行时,单元格文本与编辑附件重叠

Objective c 在iOS7中尝试删除行时,单元格文本与编辑附件重叠,objective-c,uitableview,ios7,overlap,Objective C,Uitableview,Ios7,Overlap,当我在新的iOS7中编译我的应用程序时,我在进入UITableView的编辑模式时发现了一个问题 当我按下红色减号按钮删除表格中的一行时,该行向左缩进,以显示“删除”按钮。但是,当此按钮出现时,单元格的文本与EditingAccessory重叠(仅当文本长度大于单元格长度时才会发生这种情况) 如何消除重叠 编辑:评论中的图像 编辑2:这是创建表的代码 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

当我在新的iOS7中编译我的应用程序时,我在进入UITableView的编辑模式时发现了一个问题

当我按下红色减号按钮删除表格中的一行时,该行向左缩进,以显示“删除”按钮。但是,当此按钮出现时,单元格的文本与EditingAccessory重叠(仅当文本长度大于单元格长度时才会发生这种情况)

如何消除重叠

编辑:评论中的图像

编辑2:这是创建表的代码

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{  
        return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
        return [_tweetList count];
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
        static NSString *CellIdentifier = @"SessionDetailCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        Tweet *tweet = [_tweetList objectAtIndex:indexPath.row];
        cell.textLabel.text = tweet.text;
        return cell;
 }

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
        if (editingStyle == UITableViewCellEditingStyleDelete) {
                [tableView beginUpdates];

                Tweet *deletedTweet = [_tweetList objectAtIndex:indexPath.row];
                [_selectedSession removeTweetsObject:deletedTweet];
                [deletedTweet deleteEntity];
                _tweetList = [Tweet findAllSortedBy:@"index" ascending:YES withPredicate:[NSPredicate predicateWithFormat:@"session == %@",_selectedSession]];
                [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

                [tableView endUpdates];
        }
        [[NSManagedObjectContext defaultContext]saveToPersistentStoreWithCompletion:nil];
}

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
        selectedPath = indexPath;
        [self performSegueWithIdentifier:@"EditTweet" sender:self];
}
解决方案:

最后,我将accessoryButton置于默认状态,并且仅使用编辑状态来删除行。这是我找到的唯一解决方案:(


也许,“WillTransitionState”方法可以帮助人们解决类似的问题。

您可以在编辑模式下隐藏或删除EditingAccessy,因此没有重叠

设定这个,,

屏幕截图:


您可以在编辑模式下隐藏或删除EditingAccessy,因此没有重叠

设定这个,,

屏幕截图:


我遇到了这个问题,因为在iOS 8.3中我遇到了同样的问题,在单元格内容和附件项不重叠的情况下,似乎不可能正确显示编辑附件和删除确认。在不中断过渡动画的情况下解决这个问题是一个相当大的挑战。;)

下面是我的解决方案(假设您在IB中使用自动布局约束):

  • 创建一个
    UITableViewCell
    子类,并将其链接到IB中的表视图单元格
  • 从“自动布局”约束中添加一个出口,指定最右侧视图和单元格内容视图之间的水平间距(从尾部到边距)
  • 覆盖
    willTransitionState
    LayoutSubview
    ,如下所示
  • 表单元格子类:

    @IBOutlet weak var horizontalSpaceConstraint: NSLayoutConstraint!
    
    override func willTransitionToState(state: UITableViewCellStateMask) {
        if (state & UITableViewCellStateMask.ShowingDeleteConfirmationMask == UITableViewCellStateMask.ShowingDeleteConfirmationMask) {
            self.horizontalSpaceConstraint.constant = 49.0; // ugly, delete-confirmation width
        }
        super.willTransitionToState(state)
    }
    
    override func layoutSubviews() {
        if (!self.showingDeleteConfirmation) {
            self.horizontalSpaceConstraint.constant = 0.0;
        }
        super.layoutSubviews()
    }
    

    我无法使用
    didtransitionstate()
    (并改用
    layoutSubviews
    )重置布局约束的原因是,从删除确认状态转换后,该函数根本不会被调用(从iOS 8.3开始)。苹果似乎只处理了用户实际删除行的情况,但没有处理删除确认关闭而不删除行的情况(

    我遇到了这个问题,因为在iOS 8.3中我遇到了同样的问题,在单元格内容和附件项不重叠的情况下,似乎不可能正确显示编辑附件和删除确认。在不中断过渡动画的情况下解决这个问题是一个相当大的挑战。)

    下面是我的解决方案(假设您在IB中使用自动布局约束):

  • 创建一个
    UITableViewCell
    子类,并将其链接到IB中的表视图单元格
  • 从“自动布局”约束中添加一个出口,指定最右侧视图和单元格内容视图之间的水平间距(从尾部到边距)
  • 覆盖
    willTransitionState
    LayoutSubview
    ,如下所示
  • 表单元格子类:

    @IBOutlet weak var horizontalSpaceConstraint: NSLayoutConstraint!
    
    override func willTransitionToState(state: UITableViewCellStateMask) {
        if (state & UITableViewCellStateMask.ShowingDeleteConfirmationMask == UITableViewCellStateMask.ShowingDeleteConfirmationMask) {
            self.horizontalSpaceConstraint.constant = 49.0; // ugly, delete-confirmation width
        }
        super.willTransitionToState(state)
    }
    
    override func layoutSubviews() {
        if (!self.showingDeleteConfirmation) {
            self.horizontalSpaceConstraint.constant = 0.0;
        }
        super.layoutSubviews()
    }
    

    我无法使用
    didtransitionstate()
    (并改用
    layoutSubviews
    )重置布局约束的原因是,从删除确认状态转换后,该函数根本不会被调用(从iOS 8.3开始)。苹果似乎只处理了用户实际删除行的情况,但没有处理删除确认关闭而不删除行的情况(

    Images:此图像是在按下红色减号按钮之前!此图像是在我按下红色减号按钮时!此图像是在我按下红色减号按钮之后,但不要删除行!结果相同:(不,这是一个普通的单元格,我不自定义它。通过一些有关创建单元格的代码,它可能有助于其他人理解您的问题,我正在删除我的所有注释,因为它没有用处。添加了代码,我希望这能帮助人们帮助我;)图片:这张图片是在按下红色减号按钮之前!这张图片是当我按下红色减号按钮时!这张图片是在我按下红色减号按钮之后,但不要删除行!结果是一样的:(不,这是一个普通的单元格,我不自定义它。通过一些有关创建单元格的代码,它可能有助于其他人理解您的问题,我正在删除我的所有注释,因为它没有用处。添加了代码,我希望这能帮助人们帮助我;)问题是我需要编辑附件:当我进入编辑模式时,我可以删除行或编辑它(这将导致另一个屏幕)。无论如何谢谢=)问题是我需要编辑附件:当我进入编辑模式时,我可以删除行或编辑它(这将导致另一个屏幕)。无论如何谢谢=)