最好的方法是不要使用
UISplitViewController
.
相反,只需使用全屏
UIViewController
作为一个容器,有两个容器视图由
bar
在内部,将表视图控制器和详细信息控制器作为子视图控制器添加到其中。
你可以对齐
酒吧
水平到白色
superview.center.x
(我们来命名这个约束
barAlignToSuperviewCenterConstraint
,您可以通过将约束的常量更改为与中心的偏移量来轻松移动它。
这样做,
-
贴上
UIPanGestureRecognizer
到条的超视图,它也是面板的超视图(让我们命名它
barDragRecognizer
)
-
在识别器的回调中,当PAN识别器处于状态时
.began
,将其转换设置为当前值
barAlignToSuperviewCenterConstraint.constant
:
barDragRecognizer.setTranslation(CGPoint(x: barAlignToSuperviewCenterConstraint.constant, y: 0) in: bar.superview)
-
在识别器的回调中,当PAN识别器处于以下状态之一时
.changed
,
.ended
,
.cancelled
,将约束常量的值设置为识别器的转换值:
barAlignToSuperviewCenterConstraint.constant = barDragRecognizer.translation(in: bar.superview).x;
要使识别器只接收来自条的触摸,请将视图控制器指定为识别器的委托,并实现以下功能:
func gestureRecognizer(UIGestureRecognizer recognizer, shouldReceive: UITouch touch) -> Bool {
let barExtendedBounds = bar.bounds.insetBy(dx: -20, dy: 0)
return (recognizer == barDragRecognizer && barExtendedBounds.constains(touch.location(in: bar)))
}