UIButton无法在UIScrollView的初始帧外部单击

use*_*152 9 iphone objective-c uibutton uiscrollview ios

我遇到了UIScrollView的奇怪行为,在放大UIScrollView的contentSize后我无法点击UIButton.

我想做什么:

  1. 使用UIScrollView显示表单

  2. 单击提交按钮后,滚动视图将放大一些高度以显示更多信息.

  3. 在进一步的信息中,我将放置并显示另一个UIButton(隐藏在开头),以便处理下一步.

问题是我将新UIButton放置到放大区域并且按钮不可点击,而我将UIButton放置到现有区域(滚动视图的初始帧),然后按钮正常工作.对于这两种情况,滚动视图的滚动条执行正常行为.(即,滚动结束是新的内容高度)

这是我到目前为止:

  • 一个UIView xib(放置其中的所有元素,包括隐藏按钮)

  • 一个UIScrollView(将UIView xib加载到其中)

UIView* view = [[[NSBundle mainBundle] loadNibNamed:@"view" owner:self options:nil] objectAtIndex:0];

[view loaded];

[scrollView addSubview:view];

  • 单击提交按钮后:

// offset = some amount;

[scrollview setContentSize:CGSizeMake(scrollview.contentSize.width, scrollview.contentSize.height+offset)];

// h = some amount before the end of the scroll view

CGRect r = nextBtn.frame;

r.origin.y = h;

nextBtn.frame = r;

[nextBtn setHidden:NO];

在此输入图像描述

我试图更改滚动视图的clipSubviews属性,但似乎它根本不适用于我的情况.

谁知道它是怎么发生的?有没有更好的方法来完成这项工作?(调整滚动视图的大小,然后在其中放置另一个按钮)

任何帮助都会很棒!非常感谢!

yur*_*ish -1

我假设该按钮是您从 xib 文件加载的内容视图的直接或间接子级。

问题是因为您更改了滚动视图,contentSize但没有更改内容视图的框架。超级视图参与触摸命中测试。您可以将子视图放置在其父视图边界之外,默认情况下,子视图不会被剪切,但触摸事件不会传递给它,因为父视图在命中测试期间检查触摸是否超出其边界并拒绝触摸。UIView hitTest:withEvent:详情请参阅。