使用 swift 旋转 UIContextualAction

问题描述 投票:0回答:1

我试图进行聊天,我找到了使 tableView 看起来像您使用下面的代码行从下到上填充它的方法:

//Swipe the tableView
tableView.transform = CGAffineTransform(rotationAngle: (-.pi))
tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 0, tlView.bounds.size.width - 10)
//Swipe the cells
cell.transform = CGAffineTransform(rotationAngle: (-.pi))

效果很好,但是当您使用函数 TrailingSwipeActionsConfigurationForRowAt 应用操作时,就会出现问题,因为所有内容都显示颠倒,如下图所示。正如您所看到的“详细信息”按钮,它位于右侧(它必须位于左侧)并且它是颠倒的。

这是制作动作的函数,但是UIContextualAction没有transform函数,所以不能像tableview和cell一样旋转它。

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

        let answerAction = UIContextualAction(style: .normal, title:  "Details", handler: { (ac:UIContextualAction, view:UIView, success: @escaping (Bool) -> Void) in
            success(true)
        })

        answerAction.backgroundColor = UIColor.white.withAlphaComponent(0)

        let configuration = UISwipeActionsConfiguration(actions: [answerAction])
        configuration.performsFirstActionWithFullSwipe = true

        return configuration

}

那么,我该如何旋转呢?或者还有什么其他方法可以让 tableView 从下到上填充?

非常感谢您的帮助!

uitableview swift4 rotatetransform uicontextualaction
1个回答
0
投票

这是(hacky)目标c解决方案:

-(void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    for (UIView *subview in tableView.subviews) {
        if ([NSStringFromClass(subview.class) isEqualToString:@"_UITableViewCellSwipeContainerView"]) {
            for (UIView *swipeContainerSubview in subview.subviews) {
                if ([NSStringFromClass(swipeContainerSubview.class) isEqualToString:@"UISwipeActionPullView"]) {
                    for (UIView *buttonView in swipeContainerSubview.subviews) {
                        if ([NSStringFromClass(buttonView.class) isEqualToString:@"UISwipeActionStandardButton"]) {
                            UIButton *button = (UIButton*)buttonView;
                            CGAffineTransform rotate = CGAffineTransformRotate(button.transform, M_PI);
                            CGAffineTransform translate = CGAffineTransformMakeScale(-1.0, 1.0);
                            button.transform = CGAffineTransformConcat(translate, rotate);
                        }
                    }
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.