UIViewControllerで3D TouchのPeekとPopをすると選択されるセルがずれる
UIViewControllerで3D TouchのPeekとPopすると選択されるセルがずれてしまいます。スクリーンショット(添付ファイル)の1番上のセルを3Dタッチすると3番目のセルのPeek画面が表示されます。同様に2番では4番目のPeek画面が表示されます。また、4番目と5番目のセルは3D TouchしてもPeek反応(FeedbackGeneratorの振動)がしません。
セルを普通にタッチしたときは、セルのズレがなくPlayBackViewControllerに遷移しています。
どなたか セルがずれる原因を教えていただけるでしょうか。
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
let voiceTextArray = ["11111","222222","333333","444444","55555"]
let dateTimeArray = ["dateTime1","dateTime2","dateTime3","dateTime4","dateTime5"]
var savedRow = 0
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
if traitCollection.forceTouchCapability == .available {
registerForPreviewing(with: self, sourceView: view)
} else {
print("3D Touch Not Available")
}
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return voiceTextArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "protoCell")as! ProtoTableViewCell
cell.voiceTextLable.text = voiceTextArray[indexPath.row]
cell.dateTimeLabel.text = dateTimeArray[indexPath.row]
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowPlayBackView" {
let detailViewController = segue.destination as! PlayBackViewController
let myIndexPath = self.tableView.indexPathForSelectedRow
detailViewController.voiceText = voiceTextArray[(myIndexPath?.row)!]
}
}
}
import UIKit
extension ViewController : UIViewControllerPreviewingDelegate {
func previewingContext(_ previewingContext: UIViewControllerPreviewing,
viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = tableView.indexPathForRow(at: location),
let cell = tableView.cellForRow(at: indexPath) else {
return nil }
guard let detailViewController =
storyboard?.instantiateViewController(
withIdentifier: "PlayBackViewController") as? PlayBackViewController else { return nil }
print("=====indexPath.row:",indexPath.row)
detailViewController.voiceText = voiceTextArray[indexPath.row]
detailViewController.preferredContentSize =
CGSize(width: 0.0, height: 600)
previewingContext.sourceRect = cell.frame
return detailViewController
}
func previewingContext(_ previewingContext: UIViewControllerPreviewing,
commit viewControllerToCommit: UIViewController) {
show(viewControllerToCommit, sender: self)
}
}