2

ツイートを表示するUIScrollViewがあります。scrollViewはビューのスタックに含まれ、最後のビューには4つのジェスチャ認識機能があります。

scrollViewは次のように入力されます。

- (void) createTimeLine:(NSArray*)timeline
{
    CGRect rect = CGRectMake(0, 0, 463, 150);
    NSInteger i = 0;
    NSLog(@"timeline objects: %d", timeline.count);
    self.scrollView.contentSize = CGSizeMake(463, timeline.count * 150);
    for (NSDictionary *d in timeline) {
        SingleTwitViewController *c = [[SingleTwitViewController alloc] initWithAsingleTwit:d];
        rect.origin.y = i * 150;
        c.view.frame = rect;
        [scrollView addSubview:c.view];
        [scrollView bringSubviewToFront:c.view];
        i += 1;
    }
}

タイムラインには20個のオブジェクトがあり、最初の4個が表示されます。ただし、scrollViewはスクロールせず、タッチはジェスチャ認識機能によって処理されます。

プロパティはYESに設定されていscrollEnabledますが、何らかの理由でこれが機能していないようです。

contentSizeは463*3000に設定されています。これは、scrollView自体よりもはるかに小さいですが、それでもスクロールしません。

何か案は?

4

2 に答える 2

0

これらを試して、

scrollView.userInteractionEnabled=YES;

コンテンツのサイズはscrollViewのフレームサイズよりも大きくする必要があります...コンテンツのサイズを大きく設定してください...

于 2012-09-05T04:51:45.920 に答える
0

また、 (scrollView.contentSize に関係なく) を使用してもUIScrollView、単純なビュー (の一部UIViewController) がタッチ イベントに応答しないこともわかりました。scrollView.userInteractionEnabled = trueクリーンなシングルビュー プロジェクトで

この問題は上記の質問とまったく同じではありませんが、scrollView がスクロール タッチには応答するが、単純なタッチには応答しないことは興味深いことでした。

スクロール ビューをサブクラス化し、次のようにプロトコルを追加することにしました。

protocol XXScrollViewDelegate {
    func scrollViewDidReportTouchesBegan()
}
class XXScrollView: UIScrollView {  
    var touchDelegate: XXScrollViewDelegate?    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.touchDelegate?.scrollViewDidReportTouchesBegan()
    }
}

メイン ビューでプロトコルを宣言し、デリゲートを設定することを忘れないでください (UIScrollView のデリゲート プロパティをオーバーライドしないように別の名前を使用したことに注意してください。

class ViewController: UIViewController, XXScrollViewDelegate {

scrollView.isUserInteractionEnabled = true
scrollView.touchDelegate = self

これで問題は解決しましたが、期待どおりに応答しない理由についてはまだ興味があります。

于 2018-06-11T17:11:59.933 に答える