ios - UISplitViewController - 通过拖动分隔线调整视图大小
问题描述
我认为这是 UISplitViewController 的一个基本功能,允许通过拖动分隔线来调整主/详细视图的大小。阅读文档后,我发现在 iOS 应用程序上是不可能的。但是,我确实在 iOS 上找到了具有带有可拖动分隔线的 SplitView 的应用程序,用于调整主/详细视图的大小。
有人做过吗?如果是的话,请你帮我指点一下。提前致谢。
解决方案
我不确定这是否回答了您的查询,而是使用仅UISwipeGestureRecognizer
向您的MasterViewController's
视图添加一个简单的小代码。
如果您是 iOS 8.0 或更高版本,则可以使用minimumPrimaryColumnWidth
andmaximumPrimaryColumnWidth
和preferredPrimaryColumnWidthFraction
.
我在 MasterViewController 的视图中添加了左右滑动手势识别器。
@IBAction func swipeGesture(_ sender: UISwipeGestureRecognizer) {
if sender.direction == .left {
UIView.animate(withDuration: 0.4) {
self.splitViewController?.minimumPrimaryColumnWidth = 200.0
self.splitViewController?.preferredPrimaryColumnWidthFraction = 0.0
self.splitViewController?.maximumPrimaryColumnWidth = 320.0
}
} else if sender.direction == .right {
UIView.animate(withDuration: 0.4) {
self.splitViewController?.minimumPrimaryColumnWidth = 200.0
self.splitViewController?.preferredPrimaryColumnWidthFraction = 1.0
self.splitViewController?.maximumPrimaryColumnWidth = 320.0
}
}
}
您也可以尝试使用平移手势,如下所示,以更好地控制触摸动作。
let maximumPossibleWidth:CGFloat = 320.0
var beganPoint:CGFloat = 320.0
@IBAction func panGesture(_ sender: UIPanGestureRecognizer){
if sender.state == .began {
//Began
beganPoint = sender.location(in: sender.view).x
return
}
if sender.state == .changed {
let currentPoint = sender.location(in: sender.view).x
let fraction = currentPoint / maximumPossibleWidth
if beganPoint > currentPoint {
//left
self.splitViewController?.minimumPrimaryColumnWidth = 100.0
self.splitViewController?.preferredPrimaryColumnWidthFraction = fraction
self.splitViewController?.maximumPrimaryColumnWidth = 320.0
}else {
//right
self.splitViewController?.minimumPrimaryColumnWidth = 100.0
self.splitViewController?.preferredPrimaryColumnWidthFraction = fraction
self.splitViewController?.maximumPrimaryColumnWidth = 320.0
}
}
}