UIScrollview - 屏幕外按钮不会触发

svg*_*in3 5 iphone objective-c uiscrollview ios

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

示例图

我以编程方式在动态变化的for循环中向此滚动视图添加按钮.有一个"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
}
Run Code Online (Sandbox Code Playgroud)

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

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

svg*_*in3 1

事实证明,这个问题的答案正是 rdelmar 在他的评论中所指出的。容器视图的框架被设置为屏幕尺寸的边界,因此当我将背景颜色更改为白色时,很明显边界仅限于初始屏幕宽度。

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