UIScrollview - 屏幕外按钮不会触发
Posted
技术标签:
【中文标题】UIScrollview - 屏幕外按钮不会触发【英文标题】:UIScrollview - Off-screen buttons do not fire 【发布时间】:2013-12-30 00:24:13 【问题描述】:我有一个很长的 UIScrollview,超过了屏幕的宽度。请参阅下面的屏幕截图以供参考。
我以编程方式在动态变化的 for 循环中向此滚动视图添加按钮。有一个“containerView”,它基本上与滚动视图的宽度相同,我实际上是直接在上面添加按钮。那里的代码非常简单,如下所示:
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:”方法。但是,最初不在屏幕上的那些仍然显示正常,但在点击时不会触发事件。
我在那里看到了其他类似的帖子,但似乎没有任何效果。关于这个去哪里的任何想法?我有点难过。提前致谢!
【问题讨论】:
按钮是否进入高亮状态? 好问题,当我按下它们时,最初出现在屏幕上的确实会进入高亮状态,但屏幕外的则不会。 这通常是由于按钮超出了它们的超级视图的范围造成的。你应该给 containerView 一个背景颜色,看看这是否属实。 宾果游戏!我将 containerView 的背景设置为白色,瞧,当我向右滚动时,白色在屏幕边缘的确切位置结束。现在我需要找到一个修复程序来适当地调整这个大小。感谢您对此的回答! 【参考方案1】:事实证明,这个问题的答案正是 rdelmar 在他的评论中指出的。 containerView 的框架被设置为屏幕大小的边界,所以当我将背景颜色更改为白色时,很明显边界被限制为初始屏幕宽度。
修复非常简单 - 一旦 for 循环完成,我就知道 containerView 需要多长时间,所以我只是将那里的框架设置为适当的宽度。问题已解决!
【讨论】:
【参考方案2】:在你的 for 循环之后,你需要确保你正在设置滚动视图的内容大小
[self.containerView setContentSize:CGSizeMake(MAX_X_FROM_LAST_BUTTON, self.containerView.frame.size.height)];
【讨论】:
我确实确认滚动视图的 contentSize 设置正确。我什至记录了它以确保(见下文)。但是,我在通过循环并向其添加按钮之前设置了 contentSize。我认为这不应该有什么不同,但我想确定一下,因为你提到它应该在 for 循环之后完成?内容大小:4813.000000,152.000000 我不确定,我提到这个的唯一原因是因为你没有将它包含在你的代码 sn-p 中。之后您是否尝试过设置 contentSize 以查看是否有所不同?以上是关于UIScrollview - 屏幕外按钮不会触发的主要内容,如果未能解决你的问题,请参考以下文章
对于以编程方式创建的 UIButton,有时不会触发按钮单击事件