UIScrollview - 屏幕外按钮不会触发

时间:2013-12-30 00:24:13

标签: ios iphone objective-c uiscrollview

我的UIScrollview很长,超出了屏幕的宽度。请参阅以下屏幕截图以供参考。

example drawing

我在动态变化的for循环中以编程方式向此scrollview添加按钮。有一个“containerView”基本上与scrollview的宽度相同,我实际上是将按钮直接添加到它上面。代码很简单,如下所示:

for (int i=0; i<numberOfButtons; i++) {
    UIButton *currentButton = [[UIButton alloc] init];
    [currentButton setTranslatesAutoresizingMaskIntoConstraints:NO];
    [currentButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
    [currentButton setTag:i];
    [currentButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [self.containerView addSubview:currentButton];
    // here's where I programatically set constraints for positioning
}

按钮在正确的位置显示完美,并且最初在屏幕上的按钮(即上面屏幕截图示例中的前2个)激活“buttonPressed:”方法完全正常。但是,最初屏幕外的屏幕仍显示正常,但点击时不会触发事件。

我在那里看到其他类似的帖子,但似乎没有任何效果。关于这个去哪里的任何想法?我有点难过。提前谢谢!

2 个答案:

答案 0 :(得分:1)

这个问题的答案正是rdelmar在评论中指出的。 containerView的框架被设置为屏幕大小的边界,所以当我将背景颜色更改为白色时,很明显边界限制在初始屏幕宽度。

修复非常简单 - 一旦for循环完成,我就知道了containerView需要多长时间,所以我只需将框架设置为适当的宽度。问题已解决!

答案 1 :(得分:0)

在for循环之后,您需要确保设置scrollview的内容大小

[self.containerView setContentSize:CGSizeMake(MAX_X_FROM_LAST_BUTTON, self.containerView.frame.size.height)];