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 不会滚动,并且触摸由手势识别器处理。

scrollEnabled属性设置为 YES,但由于某种原因,这似乎不起作用。

contentSize 设置为 463 * 3000 这比它自己的 scrollView 小得多,但它仍然不会滚动。

有任何想法吗?

4

2 回答 2

0

试试这些,

scrollView.userInteractionEnabled=YES;

内容大小应该大于scrollView框架大小...所以设置内容大小更大...

于 2012-09-05T04:51:45.920 回答
0

我还发现一个UIScrollView简单的视图(的一部分UIViewController)不响应触摸事件,即使是scrollView.userInteractionEnabled = true(不管scrollView.contentSize如何)。在一个干净的单视图项目中

这个问题与上面的问题并不完全一样,但我发现我的 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 回答