ios - 转换倒置的表格 View 单元格中的 3D Touch Peek

标签 ios uitableview ios9 3dtouch peek-pop

我有一个聊天应用程序,我在其中使用倒置表格 View 技术(表格 View 通过转换缩放到 (1, -1),并且所有单元格本身也缩放到 (1, -1),中和效果,从而有效地反转 TableView 以在底部显示“第一个”单元格)以从底部“启动” TableView 。一切正常,除了我需要实现 peek 和 pop 手势。我已将表格 View 单元格内的按钮连接到目标 View Controller ,并启用了 peek 和 pop,如下所示:

enter image description here

手势有效,但当我部分 3D 触摸并保持足够多以突出触摸的项目(但不弹出预览 View Controller )时,我得到倒置 View :

enter image description here

如何通过正确的变换使 View 弹出,同时仍然使用倒置的表格 View ?

最佳答案

它在轻按后显示倒置 View 的原因并不是因为它从单元格中删除了变换。事实上,单元格上的转换保持原样,但 segue 将单元格 View 从 tableView 的上下文中拉出来。因此,单元格上的变换不再被表格上的变换抵消。

我相信您可以通过对 UIStoryboardSegue 进行子类化来解决此问题,但切换在底部启动表格的方法可能会容易得多。在 this question 上查看已接受的答案.

我使用了一个稍微修改过的版本,它包含了导航栏和状态栏:

func updateTableContentInset() {
    let numRows = tableView(self.tableView, numberOfRowsInSection: 0)
    var contentInsetTop = self.tableView.bounds.size.height - (self.navigationController?.navigationBar.frame.size.height)! - 20
    for i in 0..<numRows {
        let rowRect = self.tableView.rectForRow(at: IndexPath(item: i, section: 0))
        contentInsetTop -= rowRect.size.height
        if contentInsetTop <= 0 {
            contentInsetTop = 0
        }
    }
    self.tableView.contentInset = UIEdgeInsetsMake(contentInsetTop, 0, 0, 0)
}

只需将它添加到您的 UITableViewController 并在 viewDidLoad() 上调用它,每次将新行添加到表中时。

添加新行然后调用 updateTableContentInset() 后,您必须像这样滚动到底部:

tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)

因为这里没有任何颠倒的东西,你的 Peek segue 不会有问题。

关于ios - 转换倒置的表格 View 单元格中的 3D Touch Peek,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49513439/

相关文章:

ios - 冒险游戏 Sprite 套件中的界面

ios - 一定时间后如何在iOS SDK中向视频文件添加音频?

ios - 由于未捕获的异常 'NSInternalInconsistencyException' 终止应用程序,- Swift 3

ios - 使用 Google map 路线时对成员 'subscript' 的模糊引用

ios - 试图理解 TranslationInView

swift - iOS9下MFMailComposeViewController立马消失

ios - 制作自定义导航,最好的方法是什么?

uitableview - 解析后端和 Swift UITableview

ios - UITextView 不会将输入工具栏切换到自定义键盘

ios - AFHTTPRequestOperationManager 始终使用缓存的响应