iOS 13分段控件:删除滑动手势以选择分段

use*_*226 6 uisegmentedcontrol ios swift ios13

TLDR:如何在iOS 13上删除UISegmentedControl的滑动/平移手势识别器?

嗨,在iOS 13上,UISegmentedControl改变了很多。通常,更改是基于外观的。但是还有另一个功能更改使我的应用程序混乱。

在iOS 13上,通过UISegmentedControls,您现在可以滑动/平移以更改选定的细分,并且可以触摸要选择的细分。

在我的应用程序中,基本上,我在滚动视图中嵌入了UISegmentedControl。UISegmentedControl对于屏幕而言太长,无法显示所有值,因此我创建了一个滚动视图,即屏幕的宽度,其内容宽度为UISegmentedControl的长度,并且用户滑动来访问不可见的段“滚动视图”和分段的控制幻灯片。

直到iOS 13为止,它都可以完美运行,现在,用户无法在拖动分段控件时滚动水平背景的滚动视图,因为我假设滚动视图滚动识别器被新的滚动视图滑动覆盖以选择手势。

我什至尝试以递归方式删除UISegmentedControl及其所有子视图的所有手势识别器,并且滑动以更改选择手势仍然有效...我被卡住了。

谢谢,让我知道问题是否仍不清楚

Ays*_*tub 6

我有一个类似的设置(UISegmentedControlUIScrollViewBC中太长了,客户端不希望压缩内容以适合)。这对我有用(建立在Xcode 11.1上):

class NoSwipeSegmentedControl: UISegmentedControl {

    override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将我的课程设置为该课程UISegmentedControl。在我的应用中,这只能防止在UISegmentedControl嵌入到的对象上滑动以选择手势UIScrollView。如果没有,则UIScrollView任何行为都会有所不同。这是有道理的,因为默认情况下会gestureRecognizerShouldBegin()返回true。那么,为什么这让其UIScrollView优先使用滑动手势,我不知道。但希望能有所帮助。