2017-02-27 10 views
2

UIViewviewPreSeasonCard)がコンテンツビューとして機能し、ビューコントローラに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) 
    } 
} 
+0

'preSeasonView.userInteractionEnabled = true'を追加してみてください –

+0

これは何の効果もありませんでしたが、これは最初のいくつかのビューで機能しています。 – Snapper

+0

@Snapperこの問題の解決策を見つけましたか? –

答えて

0

私は同じ問題を抱えていた、と私はスクロールビュー

内部ContentView私はContentViewは、私はその高さが等しくなるように設定することを発見し、問題がありましたScrollView親ビューに追加します。そして私は自分自身のScrollViewのContentSizeを計算していました。

スクロールビューは正しくスクロールされていますが、ViewControllerの最初の表示ではどの画面もオフスクリーンではタッチを検出できませんでした。

一部のデバッグ後、私はContentToのためにClipToBoundsをtrueにするようにしました。コンテンツビューは画面の高さを持っているだけです(ScrollView親)

コンテンツビューをスクロールビューの親と同じ高さにした制約を削除しました。 コンテナビューの下部を最も下のビューの下部に合わせるための新しい制約を追加し、コンテンツのサイズをこれ以上計算しませんでした。

現在、スクロールが正しく機能しており、すべてのビューでタッチが機能しています。

0

コンテンツビューで同じ問題があり、高さに制約がありませんでした。

私がやったのはでした。コンテンツビューを完全に削除し、問題を修正しました。

希望に役立ちます!

関連する問題