gpt4 book ai didi

ios - 有视频 : After Peek and Pop (3D Touch) background keeps scrolling

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:54:43 26 4
gpt4 key购买 nike

漏洞视频:Video

我有一个带有 UITableViewCells 的常规表格 View 。它看起来像消息。我有另一个 View Controller OperationDetailsViewController。

在 TableView 委托(delegate)中我有这个:

// need that dict for 3D touch
var dict_previwingControllers_cellIsKey = [UITableViewCell: UIViewControllerPreviewing]()

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

// setup peek and pop (register proper view)
if traitCollection.forceTouchCapability == .available, let cellForChat = cell as? OperationsSingleCell {
let previewingController = registerForPreviewing(with: self, sourceView: cellForChat.viewTextBG)
dict_previwingControllers_cellIsKey[cell] = previewingController // remember because we need to unregister
}
}

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// setup peek and pop (unregister)
if traitCollection.forceTouchCapability == .available {
if let previwingController = dict_previwingControllers_cellIsKey[cell] {
unregisterForPreviewing(withContext: previwingController)
}
}
}

要在用户点击消息背景时显示预览,我有这个:

/// Create a previewing view controller to be shown at "Peek".
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
// Obtain cell by previewing context
guard let cell = (dict_previwingControllers_cellIsKey as NSDictionary).allKeys(for: previewingContext).first as? OperationsSingleCell else {return nil}
// guard let indexPath = tableViewMain.indexPathForRow(at: location),
// let cell = tableViewMain.cellForRow(at: indexPath) as? OperationsSingleCell else { return nil }


guard let operationDetailsVC = storyboard?.instantiateViewController(withIdentifier: "OperationDetailsVC") as? OperationDetailsVC else {return nil}
// custom properties
operationDetailsVC.dbOrder = cell.dbOrder
operationDetailsVC.navigationControllerOfParentVC = navigationController
// need to load view so we will know content size
operationDetailsVC.view.reloadInputViews()

let contentHeight = operationDetailsVC.scrollViewMain.contentSize.height

/*
Set the height of the preview by setting the preferred content size of the detail view controller.
Width should be zero, because it's not used in portrait.
*/
operationDetailsVC.preferredContentSize = CGSize(width: 0.0, height: contentHeight)

// Set the source rect to the cell frame, so surrounding elements are blurred.
previewingContext.sourceRect = cell.viewTextBG.bounds

return operationDetailsVC
}

/// Present the view controller for the "Pop" action.
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
// Reuse the "Peek" view controller for presentation.
show(viewControllerToCommit, sender: self)
}

但是当用户使用 3D Touch 背景时,背景会像视频一样滚动

这很奇怪,因为在 iMessage 应用程序中它不会发生

最佳答案

我已经尝试使用默认的 tableView,但我没有遇到这种情况。也就是说,当我 3d 触摸我的 tableView 单元格时,它会弹出 detailView,并且背景 View (tableView) 不可滚动。

此外,您不必注册预览每个单元格,您可以一次注册整个 tableview 单元格。

class ViewController: UIViewController {

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()
if traitCollection.forceTouchCapability == .available {
registerForPreviewing(with: self, sourceView: tableView)
}
}

}

extension ViewController: UITableViewDataSource, UITableViewDelegate {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "Hello World"
return cell
}
}

预览代理

extension ViewController: UIViewControllerPreviewingDelegate {
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = tableView.indexPathForRow(at: location) else { return nil }
guard let cell = tableView.cellForRow(at: indexPath) else { return nil }

guard let operationDetailsVC = storyboard?.instantiateViewController(withIdentifier: "OperationDetailsVC") as? OperationDetailsVC else { return nil }

operationDetailsVC.preferredContentSize = CGSize(width: 0, height: 300)
previewingContext.sourceRect = cell.frame

// You can decide to return a viewController or nil for certain cell
return operationDetailsVC

}

func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
show(viewControllerToCommit, sender: self)
}
}

关于ios - 有视频 : After Peek and Pop (3D Touch) background keeps scrolling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41498924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com