UIView
(viewPreSeasonCard
)がコンテンツビューとして機能し、ビューコントローラにUIScrollView
があり、すべてInterface Builderで実行されました。あなたは、私はその後、サブビューを追加した後scrollView.contentSize
を調整しています見ることができるようにスクロールビューのサブビューがオフのときにジェスチャ認識機能が動作しません
func displayPreSeason(preSeasons: [PreSeason]) {
var yPos = 0
let viewWidth = Int(viewPreSeasonCard.frame.width)
for (index, preSeason) in preSeasons.enumerated() {
yPos = 40 + index * 80
let frame = CGRect(x: 0, y: yPos, width: viewWidth, height: 78)
let preSeasonView = PreSeasonLineupView(frame: frame)
preSeasonView.setPreSeason(preSeason: preSeason)
preSeasonView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.preSeasonClicked)))
viewPreSeasonCard.frame.size.height += frame.height
viewPreSeasonCard.addSubview(preSeasonView)
}
let curSize = self.view.frame
scrollView.contentSize = CGSize(width: curSize.width, height: curSize.height + CGFloat(yPos))
}
:私はプログラムでこのようにコンテナにサブビューを追加し、その後です。これはすべて正常に動作し、私はスクロールビューを一番下にスクロールして、すべてのサブビューを見ることができます。
問題はUITapGestureRecognizer
です。私はサブビューに追加しています。サブビューが最初にデバイス画面(最初の3つまたは4つのサブビュー)に表示されると、ジェスチャ認識機能が動作しています。しかし、私がサブビューを見るためにスクロールしなければならないとき、これらのサブビュー上のジェスチャーレコグナイザーは、それらをタップすると全く発砲していません。これは、下位のサブビューが最初に表示されないため、ジェスチャ認識機能が無視されるためです。
ここでジェスチャー認識のための方法です:
func preSeasonClicked(_ sender: UITapGestureRecognizer) {
if let preSeasonView = gestureRecognizer.view as? PreSeasonLineupView, let constructorId = preSeasonView.constructorId {
presenter.preSeasonClicked(constructorId: constructorId)
}
}
'preSeasonView.userInteractionEnabled = true'を追加してみてください –
これは何の効果もありませんでしたが、これは最初のいくつかのビューで機能しています。 – Snapper
@Snapperこの問題の解決策を見つけましたか? –