TLDR:iOS 13でUISegmentedControlのスワイプ/パンジェスチャー認識機能を削除する方法
こんにちは、iOS 13では、UISegmentedControlで多くの変更がありました。ほとんどの場合、変更は外観ベースでした。しかし、私のアプリをめちゃくちゃにしている別の機能変更があります。
IOS 13では、UISegmentedControlsを使用して、選択したいセグメントをタッチするだけでなく、スワイプ/パンして選択したセグメントを変更できるようになりました。
私のアプリでは、基本的に、スクロールビューに埋め込まれたUISegmentedControlがあります。 UISegmentedControlは長すぎて画面にすべての値を表示できないため、コンテンツの幅がUISegmentedControlの長さである画面の幅であるスクロールビューを作成し、非表示のセグメントにアクセスするには、ユーザーがスワイプします「スクロールビュー」とセグメント化されたコントロールスライド。
これはiOS 13まで完全に機能し、現在、ユーザーはセグメント化されたコントロールをドラッグしているときに水平背景のスクロールビューをスクロールできません。これは、スクロールビュースクロール認識機能がジェスチャーを選択するための新しいスクロールビュースワイプによってオーバーライドされているためです。
UISegmentedControlとそのすべてのサブビューのすべてのジェスチャー認識機能を再帰的に削除しようとしましたが、選択ジェスチャーを変更するためのスワイプは引き続き機能します...
ありがとう、問題が不明確な場合はお知らせください
@Aystubの回答をアップグレードしました。 UITapGestureRecognigerにセグメントの選択のみを許可できます。
class NoSwipeSegmentedControl: UISegmentedControl {
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if(gestureRecognizer.isKind(of: UITapGestureRecognizer.self)){
return false
}else{
return true
}
}
}