有没有一种方法可以轻松地重新创建ios 13的新共享表的模式表示样式? (起初,它只是中途显示,您可以向上滑动以使其成为“完整的”模态表)。我可以使用完全自定义的显示形式和内容来做到这一点,但是对于此行为是否有“本机” API,因此您不必不必使用自定义代码?
谢谢!
答案 0 :(得分:15)
这就是我尝试过的。我创建了一个新的ViewController类,扩展了UIActivityViewController。在viewDidLoad函数中,我从控制器中删除了所有子视图,并将viewController作为子视图添加到该控制器中。它似乎工作正常。虽然,这更多的工作还是可以满足看起来的要求。代码段如下。试试看。
import UIKit
class CustomActivityViewController: UIActivityViewController {
private let controller: UIViewController!
required init(controller: UIViewController) {
self.controller = controller
super.init(activityItems: [], applicationActivities: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
let subViews = self.view.subviews
for view in subViews {
view.removeFromSuperview()
}
self.addChild(controller)
self.view.addSubview(controller.view)
}
}
上面是CustomActivityViewController。您可以按如下所示将viewController添加到其中。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "YourViewController")
let activityViewController = CustomActivityViewController(controller: controller)
self.present(activityViewController, animated: true, completion: nil)
答案 1 :(得分:5)
如果您对私有API感兴趣,这就是Apple的方法:
有一个名为_UISheetDetent
的类。使用此类,您可以创建系统定义的“定位器”(中型和大型),也可以提供自己的基于块的逻辑(输入参数是表示控制器的容器视图,返回值是双精度值)-打开工作表的百分比)。
您将创建一个由这些“定位器”组成的数组,并使用_setDetents:
方法(或setValue:forKey:
)将它们提供给工作表显示控制器。要复制共享表的行为,您需要一个带有两个“定位器”的数组:中型和大型。
还有一个_indexOfLastUndimmedDetent
属性,它控制哪个“定位器”启动调光过程。
我不确定为什么苹果没有将其公开为公共API。它简洁,简单且效果很好。
您应该可能不使用此API,但是如果决定使用它,则隐藏起来应该非常容易。无论如何,请确保与Apple打开反馈,以在以后的SDK版本中公开此API。