首页 > 解决方案 > UISplitViewController - 通过拖动分隔线调整视图大小

问题描述

我认为这是 UISplitViewController 的一个基本功能,允许通过拖动分隔线来调整主/详细视图的大小。阅读文档后,我发现在 iOS 应用程序上是不可能的。但是,我确实在 iOS 上找到了具有带有可拖动分隔线的 SplitView 的应用程序,用于调整主/详细视图的大小。

有人做过吗?如果是的话,请你帮我指点一下。提前致谢。

标签: iosswiftuisplitviewcontroller

解决方案


我不确定这是否回答了您的查询,而是使用仅UISwipeGestureRecognizer向您的MasterViewController's视图添加一个简单的小代码。

如果您是 iOS 8.0 或更高版本,则可以使用minimumPrimaryColumnWidthandmaximumPrimaryColumnWidthpreferredPrimaryColumnWidthFraction.

我在 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
        }

    }
}

推荐阅读