在iOS中以编程方式禁用Dock

5

有没有可能禁用iOS中弹出的Dock?

这是我的视图控制器。请注意,它在页脚有一个可拖动的视图控制器。

screenshot of the view controller

但是当我试图快速拉起它时,Dock 就会出现:

screenshot of the Dock appearing

有没有办法禁用它?


2
最佳实践是尽量避免干扰系统手势。 - holex
3个回答

7
我认为您能够得到的最接近的答案是iOS 11中的preferredScreenEdgesDeferringSystemGestures(),它会在底部显示一个指示器,但不会在第一次滑动时拉起dock。例如,在您的视图控制器中:
override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
    return [.bottom]
}

我的经验是它仍然会吃掉滑动手势,但它仍然给用户第二次机会来触碰正确的目标。
然而,在iOS <11上,只有隐藏状态栏才能获得这种行为。
编辑:通常在面对实现这样的设计选择时,我尝试提供第二个不干扰的手势作为备用,例如在该区域轻击,具有相同的效果。

1
把应用程序的系统行为恢复到正常状态,让用户感到更好。 - Peter DeWeese
1
是的,我完全同意 - 但不幸的是有时候我们并不总是能决定要实现什么:/ - Samantha
1
谢谢你的回答。真的很有帮助。顺便说一句,我已经决定不干扰系统手势了,现在使用 UISwipeGestureRecognizer。这是一个新的学习机会。谢谢。 - iOS Developer
顺便说一下,这是一个UIViewController方法。 - aepryus

2

与iOS 11一样,您无法在应用程序中或设置中禁用Dock。我建议提供更大的区域从底部向上滑动。


1
或者使用从顶部下拉或按钮,因为在iPhone X(以及未来可能出现的其他iOS设备)上,这实际上会将应用程序发送回后台。 - Alejandro Iván

2

通常应避免此类冲突,因为它们会降低用户体验:您如何知道用户实际上不想使用Dock?

但是如果您真的想要,可以覆盖根控制器中的preferredScreenEdgesDeferringSystemGestures()方法,以指定哪些边缘不应立即触发系统手势。

例如:

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
    return .bottom
}

是的,我已经决定不干扰用户体验,并找到了替代方案。谢谢你的答案 :) - iOS Developer
1
谢谢这个。现在好多了,只有一个小拖动标签是可见的。请注意,在游戏、合成器应用程序等中,这种不必要的停靠弹出真的很烦人。(例如RavelNotes、iMini、Sunrizer)。即使那个更小的标签也不应该可见。但是是否禁用您的应用程序的停靠选项应该留给用户,例如在您的应用程序设置中。 - Ted van Gaalen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接