UIView clipToBounds没有停止在父视图外接收触摸的子视图

时间:2012-10-03 17:56:38

标签: objective-c ios uiview uiview-hierarchy

我有两个UIViews。我正在使用一个包含另一个,以便我可以在另一个内部滑动。我遇到的问题是,即使将子视图剪切到其父级的边界,它仍然会接收触摸事件并阻止对其他基础视图的访问。

我有三个显示布局的屏幕截图。我把父母的绿色和孩子的颜色都染成了红色。

想法是用户点击“查看”并且子视图向上滑动。当subView处于默认位置时,UITabBar将被覆盖且无法单击。您可以在第一张图片中看到这一点,底部有红色视图。当subView移动到顶部时,可以单击UITabBar,因为它现在可见。在第三张图片中,我展示了在绿色UIView上启用了clipToBounds的情况。

我启用了clipToBounds,所以我无法理解为什么subView会阻塞底层的UITabBar。我对clipToBounds的理解是完全错误的吗?

1 个答案:

答案 0 :(得分:2)

使用clipToBounds只会影响子视图的可视布局,而不会影响逻辑布局。这意味着虽然我的子视图对眼睛不可见,但触摸可见。

我通过设置subView的大小而不是它的位置来解决这个问题。在我的下面的代码中,stationProximityView是subView。我将其大小设置为40像素,以便将黑色标题重新显示出来。

[UIView beginAnimations:@"stationProximityBar" context:NULL];
self.stationProximityView.view.frame = CGRectOffset(self.stationProximityView.view.frame, 0, -40);
[UIView commitAnimations];

当我不再需要它时,我会将其动画显示出来。

[UIView beginAnimations:@"stationProximityBar" context:NULL];
self.stationProximityView.view.frame = CGRectMake(0 ,0, 320, 500);
[UIView commitAnimations];

如果用户点击视图按钮,则会显示整个子视图:

 [UIView beginAnimations:@"stationProximityBar" context:NULL];
 self.stationProximityView.view.frame = CGRectMake(0,460,320,40);
 [UIView commitAnimations];

解雇导致视图以与小条相同的方式隐藏。

 [UIView beginAnimations:@"hideStationProximityBar" context:NULL];
 self.stationProximityView.view.frame = CGRectMake(0,0,320,500);
 [UIView commitAnimations];

目前,此代码仅在iPhone 5上进行测试,因此硬编码高度为500会导致以前的iPhone型号出现问题。